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 ugotować, i drugą, która pozwala dowiedzieć się, czy jest ugotowany.
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) {
foreach (get_object_vars($obj) as $wlasc => $wart) {
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:
[...] Przodkowie: Obiekt lisciasty nie należy do podklasy Szpinak Obiekt lisciasty należy do klasy Szpinak, podklasy Warzywo