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).
Tyto funkce jsou k dispozici jako součást
standardního modulu, který je vždy dostupný.
K používání těchto funkcí není třeba žádná
instalace, jsou součástí jádra PHP.
Toto rozšíření nemá definováno žádné konfigurační
direktivy.
Toto rozšíření nemá definován žádný typ prostředku
(resource).
Toto rozšíření nemá definovány žádné
konstanty.
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, ať už 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 třídy Zelenina
// rozšiřuje základní třídu 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 třídy Spenat
?>
|
|
Potom z těchto tříd vytvoříme 2 objekty a vytiskneme informace o nich, vč.
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) { if (is_subclass_of($GLOBALS[$obj], $class)) { echo "Objekt $obj patří do třídy ".get_class($$obj); echo ", která je podtřídou $class\n"; } else { echo "Objekt $obj nepatří do podtřídy třídy $class\n"; } }
// instancujeme 2 objekty
$zeleninka = new Zelenina(true,"modrá"); $listnaty = new Spenat();
// vytisknout informace o obou objektech echo "zeleninka: CLASS ".get_class($zeleninka)."\n"; echo "listnatý: CLASS ".get_class($listnaty); echo ", PARENT ".get_parent_class($listnaty)."\n";
// vytisknout vlastnosti zeleninky echo "\nzeleninka: Vlastnosti\n"; vytiskni_promenne($zeleninka);
// a metody objektu listnatý echo "\nlistnatý: Metody\n"; vytiskni_metody($listnaty);
echo "\nRodič:\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:
[...]
Rodič:
Objekt listnaty nepatří do podtřídy třídy Spenat
Object listnaty patří do třídy Spenat, která je podtřídou Zelenina |
|