XI. 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á.

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:

[...]
Rodicovstvo:
Objekt leafy nepatri do podtriedy Spenat
Objekt leafy patri do tridy spenat podtriedy Zelenina

Obsah
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