![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 248 Pomógł: 38 Dołączył: 29.06.2008 Ostrzeżenie: (0%) ![]() ![]() |
Jestem nowym użytkownikiem na forum, więc może na początek się przywitam. A więc witam (IMG:http://forum.php.pl/style_emoticons/default/snitch.gif) Niedawno zacząłem się uczyć PHP i napotkałem na taki oto problem: otóż mam dwie klasy, jedna dziedzicząca
CODE class A { private $a1; //... } class B extends A { var $a2; //... } Potem wpisuje taki oto kod: CODE $b=new B(); $b->a1=11; echo "$b->a1;"; I normalnie wyświetla mi wartość zmiennej $a1 równą 11, a przecież, z tego co wyczytałem klasa dziedzicząca nie powinna dziedziczyć pól prywatnych (IMG:http://forum.php.pl/style_emoticons/default/dry.gif) Nie powinno tu być jakiegoś błędu? |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 9 Pomógł: 3 Dołączył: 25.10.2006 Ostrzeżenie: (0%) ![]() ![]() |
W klasie A zmienną a1 powinieneś zadeklarować słowem kluczowym protected
co będzie oznaczało że będzie ona dziedziczona i będzie ona nadal chroniona co uniemożliwi zrobienie czegoś takiego jak $b->a1=11; zmienne private nie są dziedziczone dlatego też w klasie B nie istnieje zmienna $a1 w momencie gdy wykonujesz $b->a1=11; metoda __set automatycznie tworzy taką zmienną i nadaje jej status publiczny możesz to zablokować zmieniając metodę __set w taki sposób aby uniemożliwiała tworzenie zmiennych które nie są zadeklarowane w klasie Kod <?php class A { protected $a1; private function op1() { //echo "Op1: $this->a1"; echo "Op A prywatna"; } } class B extends A { public function op2() { echo 'Op2 B'; } } $b=new B(); $b->a1=11; echo "$b->a1"; ?> Co do pytania które zostało podpięte do tematu to polecam jeszcze raz przeczytać sobie co to jest dziedziczenie, bo widzę tutaj kompletny brak zrozumienia tematu... Ten post edytował manro 24.07.2008, 22:24:17 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 9.10.2025 - 12:25 |