PHP 5.4.31 Released

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 ugotować, i drugą, która pozwala dowiedzieć się, czy jest ugotowany.

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

add a note add a note

User Contributed Notes 1 note

up
0
simon at caperet dot com
1 month ago
The code above doesn't work - throws Warning

Warning: get_class() called without object from outside a class in (filename)

The line
<?php
echo "Object $obj belongs to class " . get_class($$obj);
?>
should read
<?php
echo "Object $obj belongs to class " . get_class($GLOBALS[$obj]);
?>

And, for those who are interested, full output is :

veggie: CLASS Vegetable
leafy: CLASS Spinach, PARENT Vegetable

veggie: Properties
        edible = 1
        color = blue

leafy: Methods
        function Spinach()
        function cook_it()
        function is_cooked()
        function Vegetable()
        function is_edible()
        function what_color()

Parentage:
Object leafy does not belong to a subclass of Spinach
Object leafy belongs to class Spinach a subclass of Vegetable
To Top