Почему при обращении к 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 свойству родителя не происходит ошибки, а вместо этого создается еще одно свойство?
$bar->c = 'c'; //здесть нет ошибки, хотя происходит обращение к свойству private
Ошибки нет, тк обращения нет к приватному свойству — приватное родителя не видно! то есть просто не видно ребенку — оно же приватное! приватное не видно никому :) на то и приватность
и просто создается динамическое свойство c таким названием
Потому что обращения к приватному свойству нет, то есть просто не видно дочернему классу, потому что оно приватное, а приватное не видно никому. Поэтому на то и приватность
и просто создается свойство c таким названием