Hraju si s dědičností, narazil jsem na jednu drobnost.
class Budik{
private $pocetHodin;
public function kolikJeHodin()
{
return $this->pocetHodin;
}
public function pridejHodinu()
{
$this->pocetHodin++;
}
}
class LepsiBudik extends Budik{
private $pocetMinut;
public function kolikJeHodin()
{
return $this->pocetHodin.':'.$this->pocetMinut;
}
public function pridejMinutu()
{
$this->pocetMinut++;
}
public function __construct($hodiny,$minuty)
{
$this->pocetMinut = $minuty;
$this->pocetHodin = $hodiny;
}
}
$lepsi_budik = new LepsiBudik(12,30);
$lepsi_budik->pridejHodinu();
$lepsi_budik->pridejMinutu();
echo '<p>Je právě: '.$lepsi_budik->kolikJeHodin().'</p>';
Skript mi vypíše 13:31, no je mi to tak nějak divné, protože dědím metodu pridejHodinu ze třídy Budik a ta má přístup k vlastnosti $pocetHodin.
Když vypíšu pomocí print_r($lepsi_budik), tak mi to vyhodí
LepsiBudik Object ( [pocetMinut:LepsiBudik:private] => 31 [pocetHodin:Budik:private] => 1 [pocetHodin] => 12 )
Co to tam je to [pocetHodin] => 12 ?? Proč PHP nevyhodí chybu?
Pak jsem přišel na to, že když je $pocetHodin protected, tak to funguje. To by znamenalo, že pokud volám zděděnou metodu, tak pořád vystupuju pod třídou LepsiBudik - je to tak? Nicméně nemění to fakt na tom, že nechápu proč PHP nehodí chybu a co se mi to tam v tom objektu vytvořilo? Prosím o vysvětlení. Díky moc.