Podręcznik PHP
Poprzedni |  | Następny

# 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

Poprzedni | Spis treści | Następny
classkit_method_rename | Początek rozdziału | call_user_method_array