IX. 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

No external libraries are needed to build this extension.

Inštalácia

There is no installation needed to use these functions; they are part of the PHP core.

Konfigurácia behu

This extension has no configuration directives defined in php.ini.

Typy prostriedkov

This extension has no resource types defined.

Preddefinované konštanty

This extension has no constants defined.

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

// základná trieda s členskými vlastnosťami a metódami
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($$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";

// show veggie properties
echo "\nveggie: Vlastnosti\n";
print_vars($veggie);

// and leafy methods
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
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