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).
Do zbudowania tego rozszerzenia nie są wymagane
żadne zewnętrzne biblioteki.
By używać tych funkcji, nie trzeba niczego instalować.
Są one częścią jądra PHP.
To rozszerzenie nie definiuje posiada żadnych
dyrektyw konfiguracyjnych w pliku php.ini.
To rozszerzenie nie posiada żadnych rodzajów zasobów.
To rozszerzenie nie posiada żadnych stałych.
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 czy_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 czy_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($GLOBALS[$obj], $klasa)) { echo "Obiekt $obj należy do klasy ".get_class($$obj); echo ", podklasy $klasa\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żmy 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: