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, 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 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, 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) {
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: