Compzone.Org :: Podręcznik PHP :: Klasy/Obiekty
Jaki jest Twój wiek?
40 - 59
26 - 39
19 - 25
13 - 18
12 i mniej
60 i więcej
Sonda Wyniki

Add to Google

XII. 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) {
    foreach (
get_object_vars($obj) as $wlasc => $wart) {
        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
property_exists --  Checks if the object or class has a property
Copyright © 2005-2006 Compzone.Org. Kopiowanie i wykorzystywanie materiałów zawartych na tej stronie bez zgody autora zabronione!