PHP Object georiënteerd

Inheritance

Een eigenschap van een klasse is de mogelijkheid van overerving (= nederlands voor inheritance). Overerving kun je toepassen als je objecten hebt die op elkaar lijken en eigenschappen van elkaar kunnen overnemen. Neem bijvoorbeeld een applicatie over koeien! We starten met een klasse Koe! Een koe heeft 4 poten, hij roept boe en hij eet gras Dus:

class Koe
{
public int $aantal_poten;
public string $kleur;
public string $voer;
public string $geluid;

public function __construct()
{
$this->aantal_poten = 4;
$this->kleur = "geel met wit";
$this->voer = "gras";
$this->geluid = "Boe";
}

public function asText() {
echo 'Ik ben een koe met '.$this->aantal_poten. ' poten,
ik ben grotendeels '
.$this->kleur.' en ik lust graag '.$this->voer." en
ik roep "
.$this->geluid."<br>";
}
}

Toch zijn een bruine koe, en een lakenvel allebei koeien, maar wel van een andere soort. Er zijn dus overeenkomsten en een aantal verschillen. De klasse bruine koe overerft het aantal_poten en het geluid, maar het voer van de koe en de kleur verschillen.

class BruineKoe extends Koe
{
public function __construct()
{
parent::__construct();
$this->kleur = 'bruin';
$this->voer = 'gras en bix';
}
}

class LakenVel extends Koe
{
public function __construct() {
parent::__construct();
$this->kleur = 'zwart met wit';
$this->voer = 'gras';
}
}

In de constructor van de bruine koe en de lakenvel wordt met parent::__construct() de constructor van de Koe aangeroepen. Alle koeien hebben 4 poten. In de constructor van Koe worden die 4 poten geïnitialiseerd (= van een beginwaarde voorzien). Bij de bruine koe wordt de constructor nog aangevuld met de kleur 'bruin' en het voer 'gras en bix'. Op dezelfde manier wordt de Lakenvel aangepast.

$bkoe = new BruineKoe();
$bkoe->asText();

$lkoe = new LakenVel();
$lkoe->asText();

De volgende teksten worden op het scherm getoond:

Toets

Schrijf je in op de site en schrijf je in voor de cursus OOPHP. Volg deze link om de toets te maken.

Opdracht Models

Een model is in dit geval een klasse voor een tabel in een database. Door gebruik te maken van deze klasse en vervolgens een subklasse te maken voor iedere tabel in de database kun je veel code hergebruiken. Het ophalen van alle records uit een tabel is steeds weer dezelfde sql-query. Het enige dat steeds verandert is de tabelnaam.