IX. 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 terjeszti ki 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


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


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

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