Úvod
Tieto funkcie vám umožňujú získať informácie o triedach
a inštanciách objektov. Môžete získať názov triedy, do ktorej
objekt patrí, rovnako ako jeho vlastnosti a metódy. Pomocou
týchto funkcií môžete zistiť nie len triedne členstvo objektu,
ale aj jeho rodičovstvo (t.j. akej triedy je trieda objektu
rozšírením).
Požiadavky
These functions are available as part of the
standard module, which is always available.
Inštalácia
There is no installation needed to use these
functions, they are part of the PHP core.
Konfigurácia behu
This extension does not define any
configuration directives.
Typy prostriedkov
This extension does not define any resource types.
Preddefinované konštanty
This extension does not define any constants.
Príklady
V tomto príklade najprv definujeme základnú triedu a rozšírenie
triedy. Základná trieda popisuje obyčajnú zeleninu, či je jedlá
alebo nie a akej je farby. Podtrieda Spenat
pridáva spôsob jej varenia a ďalšia zisťuje, či je uvarená.
Príklad 1. classes.inc <?php
// základná trieda s členskými vlastnosťami a metódami
class Zelenina {
var $jedla;
var $farba;
function Zelenina( $jedla, $farba="green" ) {
$this->jedla = $jedla;
$this->farba = $farba;
}
function je_jedla() {
return $this->jedla;
}
function aka_farba() {
return $this->farba;
}
} // koniec triedy Zelenina
// rozsirenie zakladnej triedy
class Spenat extends Zelenina {
var $varena = false;
function Spenat() {
$this->Zelenina( true, "green" );
}
function varit_ju() {
$this->varena = true;
}
function je_uvarena() {
return $this->varena;
}
} // koniec triedy Spenat
?> |
|
Potom inštancujeme 2 ojekty z týchto tried a vypíšeme o nich
informácie, vrátane ich triednej príslušnosti. Tiež definujeme
nejaké prektické funkcie, hlavne kvôli peknému výpisu premenných.
Príklad 2. test_script.php <pre>
<?php
include "classes.inc";
// prakticke funkcie
function print_vars($obj) {
$arr = get_object_vars($obj);
while (list($prop, $val) = each($arr))
echo "\t$prop = $val\n";
}
function print_methods($obj) {
$arr = get_class_methods(get_class($obj));
foreach ($arr as $method)
echo "\tfunkcia $method()\n";
}
function class_parentage($obj, $class) {
global $$obj;
if (is_subclass_of($$obj, $class)) {
echo "Objekt $obj patri do triedy ".get_class($$obj);
echo " podtriedy $class\n";
} else {
echo "Objekt $obj nepatri do podtriedy $class\n";
}
}
// instancovanie 2 objektov
$veggie = new Zelenina(true,"blue");
$leafy = new Spenat();
// vypis informacii o objektoch
echo "veggie: CLASS ".get_class($veggie)."\n";
echo "leafy: CLASS ".get_class($leafy);
echo ", PARENT ".get_parent_class($leafy)."\n";
// show veggie properties
echo "\nveggie: Vlastnosti\n";
print_vars($veggie);
// and leafy methods
echo "\nleafy: Metody\n";
print_methods($leafy);
echo "\nRodicovstvo:\n";
class_parentage("leafy", "Spenat");
class_parentage("leafy", "Zelenina");
?>
</pre> |
|
Je dôležité poznamenať, že v horeuvedenom príklade je
objekt $leafy inštanciou triedy
Spenat, ktorá je podtriedou
Zelenina,
preto posledná časť horeuvedného skriptu bude mať výstup: