XLII. Osztály/Objektum függvények

Bevezetés

A függvényekről

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ól örökölt az adott objektum osztály).

Egy használati példa

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

  1 
  2 
  3 <?php
  4 
  5 // alap osztály tulajdonságokkal és metódusokkal
  6 class Zoldseg {
  7 
  8   var $eheto;
  9   var $szin;
 10 
 11   function Zoldseg ( $eheto, $szin="zöld" ) {
 12     $this->eheto = $eheto;
 13     $this->szin = $szin;
 14   }
 15 
 16   function eheto_e() {
 17     return $this->eheto;
 18   }
 19 
 20   function milyen_szinu() {
 21     return $this->szin;
 22   }
 23   
 24 } // vége a Zoldseg osztálynak
 25 
 26 
 27 // kiterjesztjük az alap osztályt
 28 class Paraj extends Zoldseg {
 29 
 30   var $megfozve = false;
 31 
 32   function Paraj() {
 33     $this->Zoldseg ( true, "zöld" );
 34   }
 35 
 36   function fozes() {
 37     $this->megfozve = true;
 38   }
 39 
 40   function fott_e() {
 41     return $this->megfozve;
 42   }
 43   
 44 } // vége a Paraj osztéynak
 45 
 46 ?>
 47 
 48      

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

  1 
  2 
  3 <pre>
  4 <?php
  5 
  6 include "classes.inc";
  7 
  8 // hasznos függvények
  9 
 10 function valtozok_kiirasa($obj) {
 11   $tomb = get_object_vars($obj);
 12   while (list($tul, $ertek) = each($tomb))
 13     echo "\t$tul = $ertek\n";
 14 }
 15 
 16 function metodusok_kiirasa($obj) {
 17   $tomb = get_class_methods(get_class($obj));
 18   foreach ($tomb as $metodus)
 19     echo "\tfunction $metodus()\n";
 20 }
 21 
 22 function os_osztaly($obj, $osztaly) {
 23   global $$obj;
 24   if (is_subclass_of($$obj, $osztaly)) {
 25     echo "A $obj a " . get_class($$obj) . " osztályhoz tartozik, ";
 26     echo "ami a $class egy alosztálya.\n";
 27   } else {
 28     echo "A $obj nem tartozik $class egy alosztályához.\n";
 29   }
 30 }
 31 
 32 // két objektumpéldány létrehozása
 33 
 34 $karalabe = new Zoldseg(true,"kék");
 35 $soklevelu = new Paraj();
 36 
 37 // objektuminformációk kiírása
 38 echo "karalabe: CLASS " . get_class($karalabe) . "\n";
 39 echo "soklevelu: CLASS " . get_class($soklevelu);
 40 echo " PARENT " . get_parent_class($soklevelu) . "\n";
 41 
 42 // a karalábé tulajdonságai
 43 echo "\nkaralabe: Tulajdonságok\n";
 44 valtozok_kiirasa($karalabe);
 45 
 46 // a soklevelű paraj metódusai
 47 echo "\nsoklevelu: Metódusok\n";
 48 metodusok_kiirasa($soklevelu);
 49 
 50 echo "\nSzülők:\n";
 51 os_osztaly("soklevelu", "Paraj");
 52 os_osztaly("soklevelu", "Zoldseg");
 53 ?>
 54 </pre>
 55 
 56      

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 :):

  1 
  2      [...]
  3 Szülők:
  4 A soklevelu nem tartozik Paraj egy alosztályához.
  5 A soklevelu a paraj osztályhoz tartozik, ami a Zoldseg egy alosztálya.  
  6      

Tartalom
get_class — Visszaadja egy objetum osztályának a nevét
get_parent_class — Visszaadja a szülő osztályát egy objektum osztályának
get_class_methods — Osztálymetódusnevek tömbjével tér vissza.
get_class_vars — Az osztály alaptulajdonságságainak tömbjével tér vissza.
get_object_vars — Objektumtulajdonságok asszociatív tömbjével tér vissza
is_subclass_of — Megállapítja, hogy egy objektum egy megadott osztálynak egy alosztályához tartozik-e
class_exists — Visszaadja, hogy definiált-e az osztály
method_exists — Ellenőrzi az osztálymetódus létezését
get_declared_classes — Visszatér a definiált osztályok nevének egy tömbjével
call_user_method — Egy megadott objektumon belül meghív egy függvényt