Ezek a függvények osztályokról és objektumpéldányokról
adnak információkat. Megkaphatod az osztály nevét, amihez
egy adott objektum tartozik, sőt az elemeinek tulajdonságait,
és metódusait is. Ezen függvények használatával egy objektumnak
nem csak az osztály-tagságát tudod megállapítani, hanem
a származását is (pl. hogy melyik osztályt terjeszti ki
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
(vegetable), meghatározva, hogy ehető-e vagy sem (edible),
és hogy milyen színű. Az alosztály a paraj
(Spinach) 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 őseiket is. Definiálunk néhány
hasznos függvényt, főleg azért, hogy szép legyen az információk
kiírása.
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>
|
|
Egy fontos dolog a fenti példában, hogy a
$soklevelu egy példánya
a Paraj objetumnak,
ami egy alosztálya a Zoldseg
objektumnak, ezért az utolsó része a scriptnek ezt
fogja kiírni (szerencsére nincs probléma a névelőkkel :):