Ahojte, když vytvořím třídu s názvem Auto, v ní vytvořím další třídu Doplnky jaký mám nastavit parametr při vytváření třídy Doplnky, abych se dostal na objekty třídy Auto uvnitř třídy Doplnky? Ví někdo? Díky.
Pokud se bavíme
o dědění, tak otázka nemá smysl - Doplnek by skutečně neměl být potomek třídy Auto. Potomkem třídy auto by mohl být například Osobak a Nakladak - mnemotechnická pomůcka Osobak
je Auto.
Doplnek je ve skutečnosti součást auta a
platí zde skládání. Mnemotechnická pomůcka: Auto
má Doplnek. Pak otázka může mít smysl a mohlo by to být například takto (dovolil jsem si ponechat české názvy).
<?php
class Auto {
protected $sModel = null;
protected $aDoplnky = array();
public function __construct($sModel){
$this->sModel = $sModel;
}
public function pridejDoplnek($oDoplnek){
$oDoplnek->nastavAuto($this);
array_push($this->aDoplnky, $oDoplnek);
}
public function dejModel(){
return $this->sModel;
}
public function dejDoplnky(){
return $this->aDoplnky;
}
public function __toString(){
$sToReturn = get_class($this) . ' "' . $this->sModel . '" pocet doplnku ' . sizeof($this->aDoplnky) . ' (';
$bSeparuj = false;
foreach ($this->aDoplnky as $oDoplnek){
if($bSeparuj){
$sToReturn .= ', ';
}
$sToReturn .= $oDoplnek;
$bSeparuj = true;
}
$sToReturn .= ')';
return $sToReturn;
}
}
class Doplnek {
protected $sNazev = null;
protected $oAuto = null;
public function __construct($sNazev){
$this->sNazev = $sNazev;
}
public function nastavAuto($oAuto){
if($this->oAuto === null){
$this->oAuto = $oAuto;
} else {
throw new Exception("Doplnek je jiz instalovan v jinem aute!");
}
}
public function dejNazev() {
return $this->sNazev;
}
public function __toString(){
return get_class($this) . ' "' . $this->sNazev . '" v ' . ($this->oAuto !== null ? get_class($this->oAuto) . ' "' . $this->oAuto->dejModel() . '"': "NULL");
}
}
$oSkoda = new Auto("Skoda 120");
$oKlima = new Doplnek("Klimatizace");
$oRadio = new Doplnek("Autoradio");
$oTempo = new Doplnek("Tempomat");
print($oSkoda . "\n");
print($oKlima . "\n");
print($oRadio . "\n");
print($oTempo . "\n");
$oSkoda->pridejDoplnek($oKlima);
$oSkoda->pridejDoplnek($oRadio);
$oSkoda->pridejDoplnek($oTempo);
print($oSkoda . "\n");
print($oKlima . "\n");
$oGolf = new Auto("WV Golf");
$oNavigace = new Doplnek("Navigace");
$oGolf->pridejDoplnek($oNavigace);
// $oGolf->pridejDoplnek($oTempo); // <-- toto jsme nepovolili
print($oGolf . "\n");
?>