Ezek a függvények PHP osztályokról és objektumpéldányokról
adnak információkat, mint például: az objektum osztályának
nevét (típusát), a tagváltozóit másnéven tulajdonságait,
és metódusait is. Ezekkel a függvényekkel egy objektumnak
nem csak az osztály-tagságát lehet megállapítani, hanem
a származását is, azaz, melyik osztályt kiterjesztése
az adott objektum osztály.
Ebben a példában definiálunk egy alap osztályt, és
ennek egy kiterjesztését. Az alap osztály leír egy zöldséget
(Zoldseg), meghatározva, hogy ehető-e vagy sem (eheto),
és hogy milyen színű. Az alosztály a paraj
(Paraj) hozzáad egy új metódust,
hogy megfőzhesd, és egy másikat, hogy megállapítsd, hogy
főtt-e.
Példa 1. classes.inc
<?php // alap osztály tulajdonságokkal és metódusokkal class Zoldseg {
var $eheto; var $szin;
function Zoldseg ( $eheto, $szin="zöld" ) { $this->eheto = $eheto; $this->szin = $szin; }
function eheto_e() { return $this->eheto; }
function milyen_szinu() { return $this->szin; } } // vége a Zoldseg osztálynak
// kiterjesztjük az alap osztályt class Paraj extends Zoldseg {
var $megfozve = false;
function Paraj() { $this->Zoldseg ( true, "zöld" ); }
function fozes() { $this->megfozve = true; }
function fott_e() { return $this->megfozve; } } // vége a Paraj osztéynak
?>
|
|
Most két példányt létrehozunk a fenti osztályokból, és információkat
írunk ki rólunk, beleértve az származásukat is. Definiálunk néhány
hasznos függvényt, főleg azért, hogy ezeket az információkat szépen
írjuk ki.
Példa 2. test_script.php
<pre> <?php
include "classes.inc";
// hasznos függvények
function valtozok_kiirasa($obj) { $tomb = get_object_vars($obj); while (list($tul, $ertek) = each($tomb)) echo "\t$tul = $ertek\n"; }
function metodusok_kiirasa($obj) { $tomb = get_class_methods(get_class($obj)); foreach ($tomb as $metodus) echo "\tfunction $metodus()\n"; }
function os_osztaly($obj, $osztaly) { global $$obj; if (is_subclass_of($$obj, $osztaly)) { echo "A $obj a " . get_class($$obj) . " osztályhoz tartozik, "; echo "ami a $class egy alosztálya.\n"; } else { echo "A $obj nem tartozik $class egy alosztályához.\n"; } }
// két objektumpéldány létrehozása
$karalabe = new Zoldseg(true,"kék"); $soklevelu = new Paraj();
// objektuminformációk kiírása echo "karalabe: CLASS " . get_class($karalabe) . "\n"; echo "soklevelu: CLASS " . get_class($soklevelu); echo " PARENT " . get_parent_class($soklevelu) . "\n";
// a karalábé tulajdonságai echo "\nkaralabe: Tulajdonságok\n"; valtozok_kiirasa($karalabe);
// a soklevelű paraj metódusai echo "\nsoklevelu: Metódusok\n"; metodusok_kiirasa($soklevelu);
echo "\nSzülők:\n"; os_osztaly("soklevelu", "Paraj"); os_osztaly("soklevelu", "Zoldseg"); ?> </pre>
|
|
Fontos észrevenni, hogy a fenti példában a $soklevelu
a Paraj objektum egy példánya, amely a
Zoldseg egy alosztálya objektumnak, ezért a
programunk utolsó része a következőt írja ki (szerencsére nincs probléma
a névelőkkel :)