http://www.php.net/manual/pl/language.oop5.visibility.php
Jednej rzeczy nie rozumiem dlaczego w klasie MyClass2 nie można się odwołać do echo $obj2->protected; skoro wcześniej zasłania ona zmienną z klasy podstawowej zresztą jeśli jest protected to nawet gdyby nie było zasłonięcia powinniśmy się móc odwołać do składnika protected z klasy podstawowej
<?php /** * Define MyClass */ class MyClass { public $public = 'Public'; protected $protected = 'Protected'; private $private = 'Private'; function printHello() { } } $obj = new MyClass(); $obj->printHello(); // Shows Public, Protected and Private OK wywołanie funkcji publicznej z zewnątrz (funkcja może grzebać w prywatnych składnikach swojej klasy) /** * Define MyClass2 */ class MyClass2 extends MyClass { // We can redeclare the public and protected method, but not private protected $protected = 'Protected2'; //zasłania zmienną z klasy podstawowej?
function printHello() { } } $obj2 = new MyClass2(); echo $obj2->protected; // Fatal Error? dlaczego nie wywołuje składnika ze swojej klasy, który powinien zasłonić składnik z klasy podstawowej
$obj2->printHello(); // Shows Public, Protected2, Undefined //OK wywołanie funkcji, która zasłania tą z klasy podstawowej mimo, że jest to funkcja z klasy MyClass2 wyświetla odziedziczony składnik public z klasy MyClass i zasłaniający składnik protected z klasy MyClass2 składnik private jest niedostępny. ?>