Mam takie czysto teoretyczne pytanko. Mam poniższy kod:
class klasa { private $zmienna; function __construct($wartosc) { $this->zmienna=$wartosc; } } class dzieckoKlasa extends klasa { function __construct($wartosc) { parent::__construct($wartosc); } public function zmien($wartosc){ $this->zmienna=$wartosc; } } $cos=new dzieckoKlasa(4); $cos->zmien(5);
jako wynik otrzymuje :
object(dzieckoKlasa)[1]
private 'zmienna' (klasa) => int 4
object(dzieckoKlasa)[1]
private 'zmienna' (klasa) => int 4
public 'zmienna' => int 5
i teraz tak się zastanawiam, dlaczego dzieje się jak się dzieje. Teoretycznie, $zmienna jest private, więc dzieciak nie powinien tego widzieć. W publicznym konstruktorze rodzica sobie przypisał do tej zmiennej jakąś wartość (którą widać jako pole obiektu w var_dumpie), to dlaczego w chwili w której próbuję tą wartość zmienić, tworzy mi nową zmienną, o typie public? Czy jedyna możliwość zmiany takiej zmiennej to odwołanie się do jakiejś publicznej funkcji rodzica? Mam nadzieję, że rozumiecie o co mi chodzi.
I jeszcze pytanko o var_dumpa
object(dzieckoKlasa)[1]
private 'zmienna' (klasa) => int 4
co oznacza (klasa) w nawiasie ? W tym momencie (przed wywołaniem funkcji zmien()), obiekt $cos posiada pole $zmienna czy, go nie posiada? O to w zasadzie mi chodzi w całym tym pytaniu.
Dzięki z góry za zaspokojenie mojej ciekawości ;]
pozdrawiam.