|
IX. Funkce pro prßci s t°φdami/objekty
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).
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:
| |