extends

Velikokrat potrebujete razrede s podobnimi spremenljivkami in funkcijami v drugem obstoječem razredu. Pravzaprav je dobra praksa definirati splošni razred, ki ga lahko uporabite v vseh vaših projektih in ga prilagajate vsakemu vašemu specifičnem projektu. Da si olajšate to delo, so razredi lahko razširitev drugih razredov. Razširjen ali izpeljan razred ima vse funkcije in spremenljivke osnovnega razreda (temu rešemo 'podedovanje', šeprav ni nihše umrl) in kar mu dodate v extends definiciji. Odstranjevanje funkcij ali spremenljivk ni možno, torej da bi izbrisali kaksno obstoječo funkcijo ali spremenljivko. Razširjeni razred je vedno odvisen od osnovnega razreda. Razredi so razširjeni z uporabo 'extends'.

class Named_Cart extends Cart
{
    var $owner;
  
    function set_owner ($name)
    {
        $this->owner = $name;
    }
}

Zgornje definira razred Named_Cart, ki ima vse spremenljivke in funkcije razreda Cart, dodatno spremenljivko $owner in dodatno funkcijo set_owner(). 'Named cart' ustvarite normalno in lahko sedaj nastavite ali dobite vrednost $owner. Seveda lahko uporabite vse funkcije in spremenljivke Cart razreda:

$ncart = new Named_Cart;    // Ustvari objekt Named_Cart razreda
$ncart->set_owner("kris");  // Uporabimo fukcijo v Named_Cart razredu
print $ncart->owner;        // Uporabimo spremenljivko v Named_Cart razredu
$ncart->add_item("10", 1);  // (podedovana funkcionalnost iz Cart razreda)

Temu pravimo "parent-child" zveza. Vi ustvarite razred, parent, in uporabite extends da ustvarite nov razred, ki temelji na parent razredu: child razred. Child razred lahko uporabite tudi za ustvarjanje novega razreda, ki temelji na tem child razredu.

Opomba: Razredi morajo biti definirani pred uporabo! Če želite, da razred Named_Cart podeduje razred Cart, boste morali prvo definirati razred Cart. Če želite ustvariti še Yellow_named_cart razred, ki temelji na Named_Cart razredu, boste morali prvo definirati Named_Cart razred. Na kratko: vrstni red definiranja razredov je pomemben.