Funkcie Tried/Objektov
Ú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
Žiadne externé knižnice nie sú potrebné na vybudovanie tohto rozšírenia.
Inštalácia
Nie je potrebná žiadna inštalácia na použitie týchto funkcií; sú časťou jadra PHP.
Runtime Konfigurácia
Toto rozšírenie nemá žiadne konfiguračné direktívy definované v php.ini.
Typy zdrojov
Toto rozšírenie nemá definované žiadne typy zdrojov.
Preddefinované Konštanty
Toto rozšírenie nemá definované žiadne konštanty.
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á.
Example#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.
Example#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:
[...] Rodicovstvo: Objekt leafy nepatri do podtriedy Spenat Objekt leafy patri do tridy spenat podtriedy Zelenina
Table of Contents
- call_user_method_array — Zavolať užívateľovu metódu danú s poľom parametrov [odmietané]
- call_user_method — Zavolať užívateľskú metódu na určený objekt [odmietané]
- class_exists — Zisťuje, či bola trieda definovaná
- get_class_methods — Vracia pole názvov metód triedy
- get_class_vars — Vracia pole východzích vlastností triedy
- get_class — Vracia názov triedy objektu
- get_declared_classes — Vracia pole s názvami definovaných tried
- get_declared_interfaces — Returns an array of all declared interfaces
- get_object_vars — Vracia asociatívne pole vlastností objektu
- get_parent_class — Vracia názov rodičovskej triedy pre objekt alebo triedu
- interface_exists — Checks if the interface has been defined
- is_a — Vracia TRUE ak je objekt tejto triedy alebo má túto triedu ako jedného zo svojich rodičov
- is_subclass_of — Vracia TRUE ak má objekt túto triedu ako jedného zo svojich rodičov
- method_exists — Zisťuje, či metóda triedy existuje
- property_exists — Checks if the object or class has a property