PHP OOP láthatóság
Egy régebben megírt osztályomat kell egy kicsit kibővítenem. A metódusokhoz nem állítottam be a láthatóságot, ergó ezek publikus metódusok lettek. Mivel lényegében csak egyet kell látni kívülről ezért a többinek beállítottam, hogy private, valamint volt egy eleve private változó.
Namost meglestem a doksit és azt írja, hogy a private-ként definiált cuccokat nem látja az öröklő osztály. Viszont nálam minden gond nélkül működik a dolog. Tehát van egy private-ként definiált változó (természetesen kezdőkértékkel), amit a származtatott osztály szépen lát, pedig a doksi szerint nem kellene.
Most akkor itt mi van?
Ps.: PHP 5.2.1-en próbáltam
■ Namost meglestem a doksit és azt írja, hogy a private-ként definiált cuccokat nem látja az öröklő osztály. Viszont nálam minden gond nélkül működik a dolog. Tehát van egy private-ként definiált változó (természetesen kezdőkértékkel), amit a származtatott osztály szépen lát, pedig a doksi szerint nem kellene.
Most akkor itt mi van?
Ps.: PHP 5.2.1-en próbáltam
Valóban nem látható
Én úgy próbáltam ki, hogy definiáltam egy metódust az ős osztályban, majd meghívtam az öröklő osztályt. Namost mivel nem definiáltam felül a hívó függvényt az öröklő osztályban, ezért elérte a private változót. Ha ugyanazt a metódust átmásoltam az öröklő osztályba - lényegében felüldefiniáltam, de ugyanaz maradt - akkor már nem látja.
Ennek nem úgy kellene működnie, hogy akkor sem érhető el a private változó, ha nem definiálom felül az ős osztály (hívó) metódusát?
UpDate: Ha ez így műxik jól, akkor mi értelme van a private láthatóságnak (mert nekem így nem egészen tiszta)
Így kell
Így az ősosztály metódusai biztonságosan elérik a private változójukat, mivel a többi metódus nem piszkálhat bele.
Mások nem látják
Ezt nem értem ...
Igen, de meg mégse, mert az öröklő osztály is eléri, ha nem definiálom felül a szülő osztály metódusát (public-ként van definiálva), ami eléri a private változót.
Nekem ez eléggé logikai csavar, hogy csak a szülő osztály fér hozzá, de az öröklő osztályból is. Szóval olyan, mintha a leszármazott osztály kicsit skizofrén lenne, a szülő és a leszármazott osztály egyszerre.
Ős éri el
Így már kezdem érteni a dolgokat
Tehát én az öröklést nem egy láncként fogtam fel, hanem, hogy vmi jön az ősből, de onnantól köze nincsen az ős osztályhoz, ergó egy különálló egységet képez a leszármazott osztály. De ezek szerint a valós működés nem ilyen. Még barátkoznom kell ezzel az öröklési logikával ...
Gyakorlati példa
Fekete doboz