PHP OOP začátečník - extends – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

PHP OOP začátečník - extends – PHP – Fórum – Programujte.comPHP OOP začátečník - extends – PHP – Fórum – Programujte.com

 

th
~ Anonymní uživatel
4 příspěvky
8. 3. 2011   #1
-
0
-

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.

Nahlásit jako SPAM
IP: 90.180.97.–
th
~ Anonymní uživatel
4 příspěvky
8. 3. 2011   #2
-
0
-

To th : Oprava: Skript vypíše 12:31

Nahlásit jako SPAM
IP: 90.180.97.–
Wizard0
Stálý člen
8. 3. 2011   #3
-
0
-

Premennu $pocetHodin si v triede Budik deklaroval ako "private". Ked to spravis tak k nej nema pristup ziadna ina trieda (ani trieda, ktora tridu s premennov rozsiruje). Preto ked v triede LepsiBudik spravis $this->pocetHodin++; tak sa inkrementuje ina premenna ako ta, ktora bola v triede Budik. Ked chces aby to robilo to co ocakavas tak premennu $pocetHodin musis deklarovat aspon ako "protected".$this->pocetHodin

Nahlásit jako SPAM
IP: 85.216.193.–
KIIV
~ Moderátor
+43
God of flame
8. 3. 2011   #4
-
0
-

print_r($lepsi_budik);

LepsiBudik Object
(
[pocetMinut:LepsiBudik:private] => 31
[pocetHodin:Budik:private] => 1
[pocetHodin] => 12
)

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
th
~ Anonymní uživatel
4 příspěvky
8. 3. 2011   #5
-
0
-

Jojo z tohoto jsem to poznal, že něco není v pořádku. Štve mě že kdy napíšu $lepsi_budik->nesmysl = 3, tak se v objektu nadeklaruje tato vlastnost bez toho že není deklarovaná.

A co že je to za proměnnou [pocetHodin] => 12 předpokládám že se váže k tomuto objektu, a to je jeho nějaká public "verze" vlastnosti? Co to vůbec je?

Jinak díky moc za vysvětlení

Nahlásit jako SPAM
IP: 90.180.97.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 5 hostů

Podobná vlákna

PHP OOP začátečník — založil th

Oop mvc extends — založil luboš

PHP OOP — založil Neony

PHP a pochopení OOP — založil šnek

Mé dotazy na OOP v PHP — založil polonium

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý