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).
�iadne extern� kni�nice nie s� potrebn�
na vybudovanie tohto roz��renia.
Nie je potrebn� �iadna in�tal�cia na pou�itie t�chto
funkci�; s� �as�ou jadra PHP.
Toto roz��renie nem� �iadne konfigura�n� direkt�vy
definovan� v php.ini.
Toto roz��renie nem� definovan� �iadne typy zdrojov.
Toto roz��renie nem� definovan� �iadne kon�tanty.
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
// zakladna trieda s clenskými vlastnostami a metodami 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($GLOBALS[$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";
// vypis vlastnosti zeleniny echo "\nveggie: Vlastnosti\n"; print_vars($veggie);
// a leafy method 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: