@
orgleee Nie jestem pewny czy dobrze Cię zrozumiałem, ale:
- po pierwsze tak jak napisał dr_bonzo jeżeli właściwości klasy Rodzic mają modyfikator private nie są dziedziczone przez klasę dziecko. Jeżeli chcesz aby klasa dziecko dziedziczyła te właściwości musisz zmienić te modyfikatory na protected.
- po drugie chyba pomyliłeś klasę z jej instancją. Załóżmy, że $_zmienna_1 i $_zmienna_2 mają modyfikator dostępu protected. Wykonując
<?php
$rodzic = new Rodzic();
?>
tworzysz obiekt (instancję) klasy rodzic, więc
<?php
$rodzic->setZm1('Hello');
$rodzic->setZm2('World');
?>
ustawia wartość właściwości obiektu $rodzic nie klasy Rodzic. Wywołanie
<?php
$dziecko = new Dziecko();
?>
(zakładając, że $_zmienna_1 i $_zmienna_2 mają dostęp protected) spowoduje utworzenie obiektu klasy Dziecko. Właściwości $_zmienna_1 i $_zmienna_2 nie będą miały w tym momencie żadnej wartości, ponieważ nie zostały zainicjowane w definicji kalsy Rodzic.
Według mnie są dwie metody wyjścia z tej sytuacji:
- możesz zmodyfikować klasę Rodzic
<?php
protected $_zmienna_1 = 'Hello';
protected $_zmienna_2 = 'World';
?>
Po takiej modyfikacji każdy nowo utworzony obiekt klasy Rodzic lub Dziecko będzie posiadał właściwości $_zmienna _1 i $_zmienna_2 z wartościami jak powyżej.
- jeżeli nie chcesz inicjować wartości $_zmienna_1 i $_zmienna_2 w definicji klasy zmień tylko modyfikator na protected, a następnie użyj setterów.
<?php
$rodzic = new Rodzic();
$rodzic->setZm1('Hello');
$rodzic->setZm2('World');
$dziecko = new Dziecko();
$dziecko->setZm1($rodzic->getZm1);
$dziecko->setZm2($rodzic->getZm2);
?>
Tak ja to widzę, ale ponieważ nie uważam się za eksperta w dziedzinie obiektowości być może jest coś o czym nie wiem i znajdzie się ktoś kto poda inne rozwiązanie.