Podręcznik PHP
Poprzedni
Następny
IX.
Klasy / Obiekty
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:
[...] Przodkowie:
Obiekt lisciasty nie należy do podklasy Szpinak Obiekt lisciasty należy do klasy Szpinak, podklasy Warzywo
Poprzedni
Spis treści
Następny
Początek rozdziału