extends
Gyakori, hogy szeretnél olyan osztályokat kialakÃtani, amelyek egy már meglévÅ‘ osztályhoz hasonló tulajdonságokkal és metódusokkal rendelkeznek. Tulajdonképpen jó gyakorlat egy általános osztályt definiálni, amit minden projektedben használhatsz, és ezt az osztályt alakÃtani az egyes projektek igényeinek megfelelÅ‘en. Ennek a megvalósÃtása érdekében az osztályok lehetnek más osztályok kiterjesztései. A kiterjesztett, vagy származtatott osztály minden tulajdonággal és metódussal rendelkezik, ami a kiindulási osztályban megvolt (ezt nevezzük öröklésnek, bár senki sem hal meg a folyamat során). Amit hozzáadsz a kiindulási osztályhoz, azt nevezzük kiterjesztésnek. Nem lehetséges megcsonkÃtani egy osztályt, azaz megszüntetni egy metódust, vagy tulajdonságot. Egy leszármazott osztály mindig pontosan egy alaposztálytól függ, azaz egyidejűéleg többszörös leszármaztatás nem támogatott. A kiterjesztés kulcsszava az 'extends'.
<?php
class Birtokolt_Kosar extends Kosar {
var $tulaj;
function tulajdonos_beallitasa($nev) {
$this->tulaj = $nev;
}
}
?>
Ez definiál egy Birtokolt_Kosar nevű osztályt, ami a Kosar összes változójával és metódusával rendelkezik, és van egy saját változója, a $tulaj, no meg egy saját metódusa, a tulajdonos_beallitasa(). Az Ãgy gazdával ellátott kosarat a hagyományos módon hozhatod létre, és a kosár tulajdonosát is be tudod állÃtani, le tudod kérdezni [ebben az esetben favágó módszerrel]. A gazdás kosarakon továbbra is lehet használni a Kosar függvényeit:
<?php
// Gazdás kosár létrehozása
$gkosar = new Birtokolt_Kosar;
// a tulaj beállÃtása
$gkosar->tulajdonos_beallitasa("Namilesz Teosztasz");
// a tulajdonos neve
print $gkosar->tulaj;
// (Kosar-ból öröklött funkcionalitás)
$gkosar->berak("10", 1);
?>
Ezt "szülÅ‘-gyermek" kapcsolatnak is hÃvják. Egy osztály akkor válik szülÅ‘osztállyá, ha más osztály létrehozásakor ezt veszik alapul az extends kulcsszó használatával. Ezzel a kiterjesztéssel definiált osztályt hÃvjuk gyermek-osztálynak -- ebben a kapcsolatban. Ugyanis ezek után ez a gyermekosztály is lehet más osztályok szülÅ‘osztálya, ha belÅ‘le is származtatnak egy osztályt.
Note: Az osztálydefinicióknak a további felhasználásuk elÅ‘tt rendelkezésre kell állniuk! Ha a Gazdas_Kosar-ra van szükség a Kosar kiterjesztéseként, akkor elÅ‘bb a Kosar osztályt kell definiálni. Ha egy újabb osztályt származtatunk Sarga_Gazdas_Kosar néven a Gazdas_Kosar osztályból, akkor a Gazdas_Kosar osztálydefiniciónak elÅ‘bb kell szerepelnie. Röviden, az osztálydefiniciók sorrendje nagyon fontos. Az osztálydefinÃciókat hierarchia legfelsÅ‘ szintjén álló osztállyal kell kezdeni, azzal, amelyik minden más osztálynak az Å‘sének számÃt (szülÅ‘ vagy nagy-, déd-, ük-, szépszülÅ‘).