Forum und email

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->Zeleninatrue"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