IX. Funkce pro práci s třídami/objekty

Úvod

About

Tyto funkce vám umožňují získávat informace o třídách a instancích . Můžete zjistit název třídy do které objekt patří nebo jeho proměnné a metody . Pomocí těchto funkcí můžete zjistit nejen příslušnost objektu k třídě , ale i jeho předka ( tj . kterou třídu třída tohoto objektu rozšiřuje ) .

Ukázka použití

V této ukázce nejdříve definujeme základní třídu a rozšíření této třídy . Základní třída popisuje obecnou zeleninu , je jedlá nebo ne a bez ohledu na její barvu . Podtřída Spenat přidává metodu na uvaření této zeleniny a další , která zjistí , jestli je vařená .

Příklad 1 . classes.inc

 
?php

 
/

 
/

 
základní

 
třída

 
s

 
členskými

 
proměnnými

 
a

 
metodami

 
class

 
Zelenina

 
{

 
var

 
$jedla

 
;

 
var

 
$barva

 
;

 
function

 
Zelenina

 
(

 
$jedla

 
,

 
$barva="green

 
"

 
)

 
{

 
$this

 
-

 
jedla

 
=

 
$jedla

 
;

 
$this

 
-

 
barva

 
=

 
$barva

 
;

 
    }

 
function

 
je_jedla(

 
)

 
{

 
return

 
$this

 
-

 
jedla

 
;

 
    }

 
function

 
jaka_barva(

 
)

 
{

 
return

 
$this

 
-

 
barva

 
;

 
    }

 
}

 
/

 
/

 
konec

 
tridy

 
zelenina

 
/

 
/

 
rozsiruje

 
zakladni

 
tridu

 
class

 
Spenat

 
extends

 
Zelenina

 
{

 
var

 
$varena

 
=

 
false

 
;

 
function

 
Spenat(

 
)

 
{

 
$this

 
-

 
Zelenina

 
(

 
true

 
,

 
"zelena

 
"

 
)

 
;

 
    }

 
function

 
cook_it(

 
)

 
{

 
$this

 
-

 
varena

 
=

 
true

 
;

 
    }

 
function

 
je_varena(

 
)

 
{

 
return

 
$this

 
-

 
varena

 
;

 
    }

 
}

 
/

 
/

 
konec

 
tridy

 
Spenat

 

?





Potom z těchto tříd vytvoříme 2 objekty a vytiskneme informace o nich , . rodičovských tříd . Také definujeme některé pomocné funkce , především kvůli pohodlnému tisku informací .

Příklad 2 . test_script.php

 
pre

 
?php

 
include

 
"

 
classes.inc"

 
;

 
/

 
/

 
pomocné

 
funkce

 
function

 
vytiskni_promenne($obj

 
)

 
{

 
$pole

 
=

 
get_object_vars($obj)

 
;

 
while

 
(list($vlastnost

 
,

 
$hodnota

 
)

 
=

 
each($pole)

 
)

 
echo

 
"\t$vlastnost

 
=

 
$hodnota\n"

 
;

 
}

 
function

 
vytiskni_metody($obj

 
)

 
{

 
$pole

 
=

 
get_class_methods(get_class($obj))

 
;

 
foreach

 
($pole

 
as

 
$metoda

 
)

 
echo

 
"\tfunction

 
$metoda()\n"

 
;

 
}

 
function

 
class_parentage($obj

 
,

 
$class

 
)

 
{

 
global

 
$$obj

 
;

 
if

 
(is_subclass_of($$obj

 
,

 
$class)

 
)

 
{

 
echo

 
"Objekt

 
$obj

 
patri

 
do

 
tridy

 
".get_class($$obj)

 
;

 
echo

 
"

 
ktera

 
je

 
podtridou

 
$class\n"

 
;

 
}

 
else

 
{

 
echo

 
"Objekt

 
$obj

 
nepatri

 
do

 
podtridy

 
tridy

 
$class\n"

 
;

 
    }

 
}

 
/

 
/

 
instancujeme

 
2

 
objekty

 
$zeleninka

 
=

 
new

 
Zelenina(true

 
,"modra")

 
;

 
$listnaty

 
=

 
new

 
Spenat()

 
;

 
/

 
/

 
vytisknout

 
informace

 
o

 
obou

 
objektech

 
echo

 
"zeleninka

 
:




 
CLASS

 
"

 
.get_class($zeleninka)

 
."\n"

 
;

 
echo

 
"listnaty

 
:




 
CLASS

 
"

 
.get_class($listnaty)

 
;

 
echo

 
"

 
,

 
PARENT

 
".get_parent_class($listnaty)

 
."\n"

 
;

 
/

 
/

 
vytisknout

 
vlastnosti

 
zeleninky

 
echo

 
"\nzeleninka

 
:




 
Vlastnosti\n"

 
;

 
print_vars($zeleninka)

 
;

 
/

 
/

 
a

 
metody

 
objektu

 
listnaty

 
echo

 
"\nlistnaty

 
:




 
Metody\n"

 
;

 
print_methods($listnaty)

 
;

 
echo

 
"\nRodic:\n"

 
;

 
class_parentage("listnaty"

 
,

 
"Spenat")

 
;

 
class_parentage("listnaty"

 
,

 
"Zelenina")

 
;

 
?

 
/

 
pre





Je třeba poznamenat , že ve výše uvedené ukázce je objekt $listnaty instancí třídy Spenat , která je podtřídou třídy Zelenina , a poslední část výše uvedeného skriptu tudíž vytiskne :

 
[

 
..

 
.

 
]

 
Rodic

 
:




 
Objekt

 
listnaty

 
nepatri

 
do

 
podtridy

 
tridy

 
Spenat

 
Object

 
listnaty

 
patri

 
do

 
tridy

 
Spenat

 
,

 
ktera

 
je

 
podtridou

 
tridy

 
Zelenina





Obsah
call_user_method_array -- Call a user method given with an array of parameters [deprecated]
call_user_method -- Zavolat uživatelsky definouvanou metodu určitého objektu
class_exists -- Zjistit, jestli je třída definována
get_class_methods -- Vrátit pole názvů metod třídy
get_class_vars -- Vrátit pole defaultních vlastností třídy
get_class -- Vrátit jméno třídy objektu
get_declared_classes -- Vrátit pole názvů definovaných tříd
get_object_vars -- Vrátit asociativní pole vlastností objektu
get_parent_class -- Vrátit název rodičovské třídy objektu
is_a -- Returns TRUE if the object is of this class or has this class as one of its parents
is_subclass_of -- Zjistit, jestli objekt patří do podtřídy určité třídy
method_exists -- Zjistit, jestli má třída určitou metodu