Wprowadzenie
Te funkcje pozwalaj▒ uzyskaµ informacje o klasach i ich egzemplarzach,
obiektach. Mo┐esz uzyskaµ informacjΩ o nazwie klasy do jakiej nale┐y
obiekt, a tak┐e jej w│a╢ciwo╢ci i metody. U┐ywaj▒c tych funkcji mo┐esz
dowiedzieµ siΩ nie tylko do jakiej klasy nale┐y obiekt, ale tak┐e
ustaliµ jego przodk≤w (np. jak▒ klasΩ rozszerza klasa tego obiektu).
Przyk│ady
W tym przyk│adzie najpierw zdefiniujemy bazow▒ klasΩ i jej rozszerzenie.
Klasa bazowa opisuje normalne warzywo, czy jest jadalne czy nie
oraz jego kolor. Podklasa Szpinak dodaje metodΩ
pozwalaj▒c▒ go zagotowaµ i drug▒, kt≤ra pozwala dowiedzieµ siΩ, czy
jest zagotowany.
Przyk│ad 1. classes.inc <?php
// klasa bazowa wraz z jej w│a╢ciwo╢ciami i metodami
class Warzywo {
var $jadalne;
var $kolor;
function Warzywo( $jadalne, $kolor="zielony" ) {
$this->jadalne = $jadalne;
$this->kolor = $kolor;
}
function jest_jadalne() {
return $this->jadalne;
}
function jaki_kolor() {
return $this->kolor;
}
} // koniec klasy Warzywo
// rozrzesza klasΩ bazow▒
class Szpinak extends Warzywo {
var $ugotowane = false;
function Szpinak() {
$this->Warzywo( true, "zielone" );
}
function ugotuj() {
$this->ugotowane = true;
}
function jest_ugotowane() {
return $this->ugotowane;
}
} // koniec klasy Szpinak
?> |
|
Teraz mo┐emy stworzyµ dwa egzemplarze tych klas i wydrukowaµ informacje
o nich, w│▒czaj▒c w to informacje o przodkach.
Zdefiniujemy tak┐e kilka u┐ytecznych funkcji, g│≤wnie po to by uzyskaµ
│adny wydruk zmiennych.
Przyk│ad 2. test_script.php <pre>
<?php
include "classes.inc";
// funkcje u┐ytkowe
function drukuj_wlasciwosci($obj) {
$tab = get_object_vars($obj);
while (list($wlasc, $wart) = each($tab))
echo "\t$wlasc = $wart\n";
}
function drukuj_metody($obj) {
$tab = get_class_methods(get_class($obj));
foreach ($tab as $metoda)
echo "\tfunkcja $metoda()\n";
}
function przodkowie_klasy($obj, $klasa) {
global $$obj;
if (is_subclass_of($$obj, $klasa)) {
echo "Obiekt $obj nale┐y do klasy ".get_class($$obj);
echo ", podklasy $klass\n";
} else {
echo "Obiekt $obj nie nale┐y do podklasy $klass\n";
}
}
// tworzymy 2 egzemplarze obiekt≤w
$warzywko = new Warzywo(true,"niebieski");
$lisciaste = new Szpinak();
// wydrukujemy informacjΩ o obiektach
echo "warzywko: KLASA ".get_class($warzywko)."\n";
echo "lisciaste: KLASA ".get_class($lisciaste);
echo ", PRZODEK ".get_parent_class($lisciaste)."\n";
// poka┐ym w│a╢ciwo╢ci warzywka
echo "\nwarzywko: W│a╢ciwo╢ci\n";
drukuj_wlasciwosci($warzywko);
// i metody li╢ciastego
echo "\nlisciaste: Metody\n";
drukuj_metody($lisciaste);
echo "\nPrzodkowie:\n";
przodkowie_klasy("lisciaste", "Szpinak");
przodkowie_klasy("lisciaste", "Warzywo");
?>
</pre> |
|
Wart▒ odnotowania rzecz▒ w powy┐szym przyk│adzie jest to,
┐e obiekt $lisciaste jest egzemplarzem klasy
Szpinak kt≤ra to jest podklas▒ klasy
Warzywo, i tak ostatnia czΩ╢µ powy┐szego
skryptu poka┐e na wyj╢ciu: