Задать вопрос
@Syomafr

Почему при обращении к private свойству родителя не происходит ошибки?

Здравствуйте!
Есть следующий код:

class Foo
{
public $a;
protected $b;
private $c;
}

class Bar extends Foo
{
}

$foo = new Foo();
$foo->a = 'a';
//$foo->b = 'b'; //ОШИБКА, так как происходит обращение к protected свойству
//$foo->c = 'c'; //ОШИБКА, так как происходит обращение к private свойству

$bar = new Bar();
$bar->a = 'a';
//$bar->b = 'b'; //ОШИБКА, так как происходит обращение к protected свойству
$bar->c = 'c'; //здесть нет ошибки, хотя происходит обращение к свойству private

var_dump объекта 1:
object(Foo)#1 (3) {
["a"]=>
string(1) "a"
["b":protected]=>
NULL
["c":"Foo":private]=>
NULL
}

var_dump объекта 2:
object(Bar)#2 (4) {
["a"]=>
string(1) "a"
["b":protected]=>
NULL
["c":"Foo":private]=>
NULL
["c"]=>
string(1) "c"
}

Почему при обращении к private свойству родителя не происходит ошибки, а вместо этого создается еще одно свойство?
  • Вопрос задан
  • 177 просмотров
Подписаться 1 Простой 1 комментарий
Пригласить эксперта
Ответы на вопрос 1
DoNiFF
@DoNiFF
C++ Developer
Потому что обращения к приватному свойству нет, то есть просто не видно дочернему классу, потому что оно приватное, а приватное не видно никому. Поэтому на то и приватность
и просто создается свойство c таким названием
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы