Zarábaj až 6 000 € mesačne! Akreditované rekvalifikačné kurzy od 0 €. Viac informácií.

Diskusia – 7. diel - Dedičnosť v PHP

Späť

Upozorňujeme, že diskusie pod našimi online kurzami sú nemoderované a primárne slúžia na získavanie spätnej väzby pre budúce vylepšenie kurzov. Pre študentov našich rekvalifikačných kurzov ponúkame možnosť priameho kontaktu s lektormi a študijným referentom pre osobné konzultácie a podporu v rámci ich štúdia. Toto je exkluzívna služba, ktorá zaisťuje kvalitnú a cielenú pomoc v prípade akýchkoľvek otázok alebo projektov.

Komentáre
Avatar
urso
Člen
Avatar
Odpovedá na Aleš Hamerle
urso:26.1.2017 11:34

Ahoj,
asi je problém v jednoduchých uvozovkách, je rozdíl napsat

echo "Něco";

a

echo 'Něco';
Odpovedať
26.1.2017 11:34
Ne estas pano sen laboro!
Avatar
Petr
Člen
Avatar
Odpovedá na Pavel Habžanský
Petr:21.7.2018 23:19

Dle mého názoru je správný postup takový, že parametry v konstruktoru nikdo zpětně měnit nebude (tedy pokud už se třída někde používá), protože ten guláš už by nikdo nemusel dát dohromady.

Odpovedať
21.7.2018 23:19
Kdyby zakladatel nebyl arogantni k****, mohl byt ITNetwork fakt ceska oborova socialni sit.
Avatar
Daniel Troszok:25.10.2018 22:19

My budeme ale chtít do naší aplikace přidat Javistu (pardon, ale PHPista zní divně ) Když mi napíšete jak se programátorům v tomto jazyce říká, změním to.

Já bych se zatím nazval PéHáPako %P

 
Odpovedať
+1
25.10.2018 22:19
Avatar
Marian Bubenik:7.2.2019 10:10

Zdravím, může mi prosím někdo poradit, proč se mi objeví hláška:
"Fatal error: Uncaught Error: Call to protected method Clovek::celeJmeno() from context '' in C:\W..."?
Použil jsem pro zkušební výpis v index.php:
" echo $karel->celeJmeno()."<br>"; "

 
Odpovedať
7.2.2019 10:10
Avatar
Odpovedá na Marian Bubenik
Michal Šmahel:7.2.2019 15:43

Ahoj, je to poměrně jednoduché - stačí si pozorně přečíst danou hlášku. Je v ní uvedeno, že se snažíš volat metodu, která není veřejná, ale protected. Jak je uvedeno v článku, protected slouží pro vnitřní účely tříd. Konkrétně se používají pro zpřístupnění privátních metod pro potomky třídy, kde jsou deklarované či implementované. Metodu celeJmeno() tedy můžeš využít pouze v potomcích třídy Clovek - např. ve třídě Javista.

Odpovedať
7.2.2019 15:43
Nejdůležitější je motivace, ovšem musí být doprovázena činy.
Avatar
Odpovedá na Michal Šmahel
Marian Bubenik:7.2.2019 23:24

Ahoj, děkuji za odpověď, tomu rozumím, ale...
"... Metodu nyní nebudeme schopni zavolat v index.php (mimo třídu), ale budeme ji schopni zavolat jak ve třídě Clovek, tak ve třídě Javista."
Jak sám píšeš: "Metodu celeJmeno() tedy můžeš využít pouze v potomcích třídy Clovek - např. ve třídě Javista."

Tedy chápu to tak, že pokud si udělám instanci třídy Clovek nebo Javista, měl bych být schopný metodu použít.
proto jsem vytvoril (podle lekce)
$jan = new Javista('Jan', 'Nový', 24, 'Eclipse');
a myslel, že metodu celeJmeno() použiju v $jan->...
echo $jan->celeJmeno();
Asi to špatně chápu. :)

 
Odpovedať
7.2.2019 23:24
Avatar
Odpovedá na Marian Bubenik
Michal Šmahel:8.2.2019 10:30

Ano, chápeš to špatně. Když si uděláš instanci nějaké třídy (vytvoříš objekt), již se jedná o přístup zvenčí. K tomuto přístupu potřebuješ modifikátor public (veřejný). Private a protected můžeš využít pouze v daných třídách (souborech).

Odpovedať
8.2.2019 10:30
Nejdůležitější je motivace, ovšem musí být doprovázena činy.
Avatar
Odpovedá na Michal Šmahel
Marian Bubenik:8.2.2019 10:36

Ok, díky, jak by tedy prakticky vypadalo použití (využití) ve třídách Clovek nebo Javista?

 
Odpovedať
8.2.2019 10:36
Avatar
Odpovedá na Marian Bubenik
Michal Šmahel:8.2.2019 10:56

Je to myšleno jako pomocná metoda. Třída Clovek by mohla mít metodu predstavSe(), která by této metody využívala. Javista by mohla mít metodu napisSvujCopy­right(), také by ji využila.

// Clovek
public function predstavSe(): string
{
    return "Jmenuji se " . $this->celeJmeno();
}

// Javista
public function napisSvujCopyright(int $pocatecniRok): string
{
    return "Copyright © " . parent::celeJmeno() . " {$pocatecniRok}-" . date("Y");
}

// index.php
$jarda = new Clovek(...);
echo $jarda->predstavSe();

$standa = new Javista(...);
echo $standa->napisSvujCopyright(2018);

Za syntaktické chyby se omlouvám. Původně jsem se nějak špatně orientoval a psal to v Javě a navíc to píšu na telefonu. Jde tu však o to nastínit reálné použití a na to by to mělo jistě stačit.

Editované 8.2.2019 10:58
Odpovedať
+1
8.2.2019 10:56
Nejdůležitější je motivace, ovšem musí být doprovázena činy.
Avatar
Odpovedá na Michal Šmahel
Marian Bubenik:8.2.2019 16:19

Ale aby mi fungovalo použití metody celeJmeno(), tak stejně tato metoda musí být public... ne?

 
Odpovedať
8.2.2019 16:19
Robíme čo je v našich silách, aby bola tunajšia diskusia čo najkvalitnejšia. Preto do nej tiež môžu prispievať len registrovaní členovia. Pre zapojenie sa do diskusie sa zaloguj. Ak ešte nemáš účet, zaregistruj sa, je to zadarmo.

Zobrazené 10 správy z 45.