IX . Klasy / Obiekty

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





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
get_class_methods -- Zwraca tablicę nazw metod danej klasy
get_class_vars -- Zwraca tablicę domyślnych właściwości klasy
get_class -- Zwraca nazwę klasy zadanego obiektu
get_declared_classes -- Zwraca tablicę z nazwami zdefiniowanych klas
get_object_vars -- Zwraca tablicę asocjacyjną właściwości obiektu
get_parent_class -- Pobiera nazwę klasy przodka obiektu bądź klasy
is_a -- Zwraca TRUE jeżeli obiekt jest tej klasy, lub ta klasa jest jednym z jego przodków
is_subclass_of -- Zwraca TRUE jeżeli klasa jest jednym z przodków obiektu
method_exists -- Sprawdza czy istnieje metoda dla klasy