Я недавно начал ООП в PHP, и я нахожусь в концепции видимости (общедоступной, защищенной, частной). Здесь я смущен насчет защищенной видимости. Защищенные члены могут быть доступны только в объявляющих классах или подклассах или дочерних классах. У меня есть этот пример на сайте РНР:ООП-видимость в PHP
class MyClass
{
public $public = 'Public';
protected $protected = 'Protected';
private $private = 'Private';
function printHello()
{
echo $this->public;
echo $this->protected;
echo $this->private;
}
}
class MyClass2 extends MyClass
{
// We can redeclare the public and protected method, but not private
protected $protected = 'Protected2';
function printHello()
{
echo $this->public;
echo $this->protected;
echo $this->private;
}
}
$obj2 = new MyClass2();
echo $obj2->public; // Works
echo $obj2->protected; // Fatal Error
echo $obj2->private; // Undefined
$obj2->printHello(); // Shows Public, Protected2, Undefined
В этом коде в третьей последней строке (echo $obj2->protected; // Fatal Error
) он дает роковую ошибку. Но не защищена ли переменная, унаследованная в дочернем классе MyClass2 в этом случае? Так почему же эта фатальная ошибка? Может кто-нибудь, пожалуйста, просветит меня об этом?
Вы пытаетесь получить доступ к элементу 'protected' за пределами области действия обоих классов. –
'echo $ obj2-> protected; // Fatal Error' Эта строка находится за пределами обоих классов. Как это должно работать тогда? Так будет работать с общественностью таким образом –
И вы сами продемонстрировали в методе 'printHello', что ваш ребенок может получить доступ к защищенному свойству родителя. –