Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: Karman 29. 04. 2014, 15:08:52

Název: Jak zavolat constructor u rodičovské třídy v php jinak než z potomka třídy?
Přispěvatel: Karman 29. 04. 2014, 15:08:52
Ahoj, volám class s názvem Adresy. Tato class s názvem Adresy je extends, čili má rodiče s názvem Region.
Kód: [Vybrat]
class Region {
}

class Adresy extends Region {
}

Jak mám udělat to, abych nemusel z každé class (která je rodič class Region), volat parrent::__constructor('par1', 'par2') ?

Poradí někdo?
Název: Re:Jak zavolat constructor u rodičovské třídy v php jinak než z potomka třídy?
Přispěvatel: Kit 29. 04. 2014, 15:28:06
Vzhledem k tomu, že Adresy není Region, ale spíš Region je součástí Adresy, zrušil bych rodičovskou vazbu.
Název: Re:Jak zavolat constructor u rodičovské třídy v php jinak než z potomka třídy?
Přispěvatel: dodo 29. 04. 2014, 20:51:27
nedefinovat v potomkovi konstruktor :)
region mi pride skor ako atribut adresy, ale neviem co riesis, takze len tip
Název: Re:Jak zavolat constructor u rodičovské třídy v php jinak než z potomka třídy?
Přispěvatel: Kozzi 29. 04. 2014, 21:11:42
Ahoj, volám class s názvem Adresy. Tato class s názvem Adresy je extends, čili má rodiče s názvem Region.
Kód: [Vybrat]
class Region {
}

class Adresy extends Region {
}

Jak mám udělat to, abych nemusel z každé class (která je rodič class Region), volat parrent::__constructor('par1', 'par2') ?

Poradí někdo?

Tak za prve trida by se nemela jmenovat Adresy ale spis Adresa. Mnozne cislo se pouziva pro oznaceni kolekci objektu atd. Jinak jak uz bylo receno vykasli se na dedicnost a pouzi kompozici. Takze si vytvor tridu Adresa a tridu Region a ve tride Adresa vytvor property typu region.
Název: Re:Jak zavolat constructor u rodičovské třídy v php jinak než z potomka třídy?
Přispěvatel: eMko 30. 04. 2014, 07:53:28
Dědičnost by se měla primárně používat k modelování vazby "něco je něco-obecnějšího".

Např. z třídy Animal může dědit třída Mammal a z ní třída Cat a Dog. Kočky i psi jsou savci a savci jsou zvířata.

Nicméně u adresy a regionu je použití dědičnosti nevhodné - tady spíš adresa patří do regionu, nikoliv adresa je region.

Vazbu "patří do" je lepší modelovat kompozicí:

Kód: [Vybrat]
class Region {
}

class Adress {
    private Region _region;

    function __construct(Region region) {
       _region = region;
    }

    function getRegion() {
        return _region;
    }
}

Udělat správně objektový návrh dat není úplně sranda. To, že je chyba v logice programu, nevadí zas až tolik - snadno se opraví (byť samozřejmě je tu riziko, že před zákazníkem bude člověk vypadat jako kkt). Ale pokud jsou špatně namodelovaná data, tak se to může později projevit tím, že celý softwarový produkt (a je jedno, jestli malý web nebo velký systém) bude ve stavu FUBAR* .

* http://en.wikipedia.org/wiki/Military_slang#FUBAR
Název: Re:Jak zavolat constructor u rodičovské třídy v php jinak než z potomka třídy?
Přispěvatel: Novy 30. 04. 2014, 11:27:36
Častá chyba začátečníků, nadúživáni dědičnosti.
Název: Re:Jak zavolat constructor u rodičovské třídy v php jinak než z potomka třídy?
Přispěvatel: Kit 30. 04. 2014, 13:59:14
Častá chyba začátečníků, nadúživáni dědičnosti.
Častých chyb začátečníků je hromada. Nadužívání getterů, setterů, víceslovních názvů objektů i metod,... Některým to i zůstane nafurt.
Název: Re:Jak zavolat constructor u rodičovské třídy v php jinak než z potomka třídy?
Přispěvatel: eMko 30. 04. 2014, 15:01:46
Problém je, že častých chyb začátečníků se občas doupouští i lidé s 10 a více letou praxí...