Az alapok

class

Minden osztálydefiníció a class kulcsszóval kezdődik, amit az osztály neve követ, ami bármi lehet, kivéve fenntartott szó a PHP-ban. Ez egy pár kapcsos zárójel ( { és } ) követ, ami tartalmazza az adattagok és metódusok definícióját. Az álváltozó, $this hozzáférhető amikor a metódust objektumon belül hívtuk meg. $this egy referencia a hívó objektumra (rendszerint az az objektum, amihez a metódus tartozik, de lehet más objektum is, ha a metódust statikusan hívtuk meg vagy másodlagos objektumból). Ezt mutatják be a következő példák:

Példa 19-1. A $this változó objektum-orientált nyelvben

<?php
class A
{
    function
foo()
    {
        if (isset(
$this)) {
            echo
'$this definiálva van (';
            echo
get_class($this);
            echo
")\n";
        } else {
            echo
"\$this nincs definiálva.\n";
        }
    }
}

class
B
{
    function
bar()
    {
        
A::foo();
    }
}

$a = new A();
$a->foo();
A::foo();
$b = new B();
$b->bar();
B::bar();
?>

A fenti példa a következő kimenetet adja:

$this definiálva van (a)
$this nincs definiálva.
$this definiálva van (b)
$this nincs definiálva.

Példa 19-2. Egyszerű Osztálydefiníció

<?php
class SimpleClass
{
    
// adattag deklaráció
    
public $var = 'alapértelmezett érték';

    
// metódus deklaráció
    
public function displayVar() {
        echo
$this->var;
    }
}
?>

Az alapértelmezett értéknek állandos (konstans) kifejezésnek kell lennie, nem (például) egy változó, osztály adattag vagy függvényhívás.

Példa 19-3. Osztály adattagok alapértelmezett értékei

<?php
class SimpleClass
{
    
// érvénytelen adattag-deklarációk:
    
public $var1 = 'hello '.'world';
    
public $var2 = <<<EOD
hello world
EOD;
    
public $var3 = 1+2;
    
public $var4 = self::myStaticMethod();
    
public $var5 = $myVar;

    
// érvényes adattag-deklarációk:
    
public $var6 = myConstant;
    
public $var7 = self::classConstant;
    
public $var8 = array(true, false);
    
    
}
?>

Megjegyzés: Itt található néhány hasznos függvény osztályok és objektumok kezeléséhez. Ehhez nézdd meg a Osztály/Objektum Függvények részt.

new

Egy osztálypéldány létrehozásához új objektumot kell létrehozni és változóba tárolni. Az objektum mindig bekerül a változóba létrehozáskor, kivéve ha az új objektumnak van konstruktora, és ez kivételt (exception) dob vagy hibát okoz. Az osztályokat használat előtt kellene definiálni (és néhány esetben ez egy követelmény).

Példa 19-4. Osztálypéldány létrehozása

<?php
$instance
= new SimpleClass();
?>

Amikor egy előre létrehozott objektumpéldányt tárolunk új változóba, az új változó hozzáfér ugyanahhoz a példányhoz, amit tároltunk. Így viselkedik akkor is, amikor az objetumpéldányt függvénynek adjuk át. Egy, már meglévő objektumnak a másolatát klónozással lehet elkészíteni.

Példa 19-5. Objektumok értékadása

<?php
$assigned   
=  $instance;
$reference  =& $instance;

$instance->var = '$assigned-nek ez az értéke lesz';

$instance = null; // $instance és $reference értéke null lesz

var_dump($instance);
var_dump($reference);
var_dump($assigned);
?>

A fenti példa a következő kimenetet adja:

NULL
NULL
object(SimpleClass)#1 (1) {
   ["var"]=>
     string(30) "$assigned-nek ez az értéke lesz"
}

extends

Egy osztály örökölhet metódusokat és adattagokat már osztályoktól az extends kulcsszót használva az osztálydeklarációban. Nem lehetséges öröklös egyszerre több osztálytól, egy osztály egyszerre csak egy alap osztálytól örökölhet.

Az örökölt metódusok és adattagok felülírhatóak, hacsak nem ha azok a szülő osztályban a final kulcsszóval vannak definiálva, és ugyanazzal a névvel van definiálva a szülő osztályban. Lehetséges a hozzáférés a felülírt metódusokhoz és adattagokhoz ezeket renerenciaként használva a parent::-tal.

Példa 19-6. Egyszerű osztályöröklődés

<?php
class ExtendClass extends SimpleClass
{
    
// Szülő osztály metódusának újradefiniálása
    
function displayVar()
    {
        echo
"Öröklő osztály\n";
        
parent::displayVar();
    }
}

$extended = new ExtendClass();
$extended->displayVar();
?>

A fenti példa a következő kimenetet adja:

Öröklő osztály
alapértelmezett érték