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
: