Gratulacje, kretor Mój egrafik został zakończony. Jeżeli rejestrowałeś się w tym kreatorze, pamiętaj aby kliknąć w link potwierdzający, wysłany na Twój adres email. Jeżeli tego nie zrobisz, nie będziesz mógł się zalogować, a dodane przez Ciebie wpisy nie zostaną opublikowane.
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).
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 {
// 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);
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
Spis treści
call_user_method_array --
Wywołuje metodę użytkownika zadaną z tablicą parametrów [przestarzałe]
call_user_method --
Wywołuje metodę użytkownika na zadanym obiekcie [przestarzałe]
class_exists -- Sprawdza czy klasa została zdefiniowana