XI. Klasy/Obiekty

Wstęp

Te funkcje pozwalają uzyskać informacje o klasach i ich egzemplarzach, obiektach. Możesz uzyskać informację o nazwie klasy do jakiej należy obiekt, a także jej właściwości i metody. Używając tych funkcji możesz dowiedzieć się nie tylko do jakiej klasy należy obiekt, ale także ustalić jego przodków (np. jaką klasę rozszerza klasa tego obiektu).

Wymagania

Do zbudowania tego rozszerzenia nie są wymagane żadne zewnętrzne biblioteki.

Instalacja

By używać tych funkcji, nie trzeba niczego instalować. Są one częścią jądra PHP.

Konfiguracja czasu wykonywania

To rozszerzenie nie definiuje posiada żadnych dyrektyw konfiguracyjnych w pliku php.ini.

Typy zasobów

To rozszerzenie nie posiada żadnych rodzajów zasobów.

Stałe predefinopwane

To rozszerzenie nie posiada żadnych stałych.

Przykłady

W tym przykładzie najpierw zdefiniujemy bazową klasę i jej rozszerzenie. Klasa bazowa opisuje normalne warzywo, czy jest jadalne czy nie oraz jego kolor. Podklasa Szpinak dodaje metodę pozwalającą go zagotować i drugą, która pozwala dowiedzieć się, czy jest zagotowany.

Przykład 1. classes.inc

<?php

// klasa bazowa wraz z jej właściwościami i metodami
class Warzywo {

    var
$jadalne;
    var
$kolor;

    function
Warzywo($jadalne, $kolor="zielony") {
        
$this->jadalne = $jadalne;
        
$this->kolor = $kolor;
    }

    function
czy_jadalne() {
        return
$this->jadalne;
    }

    function
jaki_kolor() {
        return
$this->kolor;
    }

}
// koniec klasy Warzywo

// rozrzesza klasę bazową
class Szpinak extends Warzywo {

    var
$ugotowane = false;

    function
Szpinak() {
        
$this->Warzywo(true, "zielone");
    }

    function
ugotuj() {
        
$this->ugotowane = true;
    }

    function
czy_ugotowane() {
        return
$this->ugotowane;
    }

}
// koniec klasy Szpinak

?>

Teraz możemy stworzyć dwa egzemplarze tych klas i wydrukować informacje o nich, włączając w to informacje o przodkach. Zdefiniujemy także kilka użytecznych funkcji, głównie po to by uzyskać ładny wydruk zmiennych.

Przykład 2. test_script.php

<pre>
<?php

include "classes.inc";

// funkcje użytkowe

function drukuj_wlasciwosci($obj) {
    
$tab = get_object_vars($obj);
    while (list(
$wlasc, $wart) = each($tab))
        echo
"\t$wlasc = $wart\n";
}

function
drukuj_metody($obj) {
    
$tab = get_class_methods(get_class($obj));
    foreach (
$tab as $metoda)
        echo
"\tfunkcja $metoda()\n";
}

function
przodkowie_klasy($obj, $klasa) {
    global $
$obj;
    if (
is_subclass_of($GLOBALS[$obj], $klasa)) {
        echo
"Obiekt $obj należy do klasy ".get_class($$obj);
        echo
", podklasy $klasa\n";
    } else {
        echo
"Obiekt $obj nie należy do podklasy $klass\n";
    }
}

// tworzymy 2 egzemplarze obiektów

$warzywko = new Warzywo(true, "niebieski");
$lisciaste = new Szpinak();

// wydrukujemy informację o obiektach
echo "warzywko: KLASA ".get_class($warzywko)."\n";
echo
"lisciaste: KLASA ".get_class($lisciaste);
echo
", PRZODEK ".get_parent_class($lisciaste)."\n";

// pokażmy właściwości warzywka
echo "\nwarzywko: Właściwości\n";
drukuj_wlasciwosci($warzywko);

// i metody liściastego
echo "\nlisciaste: Metody\n";
drukuj_metody($lisciaste);

echo
"\nPrzodkowie:\n";
przodkowie_klasy("lisciaste", "Szpinak");
przodkowie_klasy("lisciaste", "Warzywo");
?>
</pre>

Wartą odnotowania rzeczą w powyższym przykładzie jest to, że obiekt $lisciaste jest egzemplarzem klasy Szpinak która to jest podklasą klasy Warzywo, i tak ostatnia część powyższego skryptu pokaże na wyjściu:

[...]
Przodkowie:
Obiekt lisciasty nie należy do podklasy Szpinak
Obiekt lisciasty należy do klasy Szpinak, podklasy Warzywo

Spis treści
call_user_method_array --  Wywołuje metodę użytkownika zadaną z tablicą parametrów [przestarzałe]
call_user_method --  Wywołuje metodę użytkownika na zadanym obiekcie [przestarzałe]
class_exists -- Sprawdza czy klasa została zdefiniowana
get_class_methods -- Zwraca tablicę nazw metod danej klasy
get_class_vars --  Zwraca tablicę domyślnych właściwości klasy
get_class -- Zwraca nazwę klasy zadanego obiektu
get_declared_classes -- Zwraca tablicę z nazwami zdefiniowanych klas
get_declared_interfaces --  Returns an array of all declared interfaces
get_object_vars -- Zwraca tablicę asocjacyjną właściwości obiektu
get_parent_class -- Pobiera nazwę klasy przodka dla obiektu lub klasy
interface_exists -- Checks if the interface has been defined
is_a --  Zwraca TRUE jeżeli obiekt jest tej klasy, lub ta klasa jest jednym z jego przodków
is_subclass_of --  Zwraca TRUE jeżeli klasa jest jednym z przodków obiektu
method_exists -- Sprawdza czy metoda klasy istnieje

Hosting by: Hurra Communications Sp. z o.o.
Generated: 2007-01-26 18:02:57