Почему при обращении к 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 свойству родителя не происходит ошибки, а вместо этого создается еще одно свойство?
При обращении к private свойству родителя из класса-наследника происходит создание нового private свойства в классе-наследнике, а не прямое обращение к private свойству родителя. Это связано с тем, что private свойства доступны только внутри класса, в котором они были объявлены, и не могут быть доступны в классах-наследниках напрямую.
Поэтому при обращении к private свойству родителя из класса-наследника происходит создание нового private свойства в классе-наследнике со значением, переданным при обращении. В данном случае, когда мы обращаемся к private свойству $c класса Foo из объекта $bar класса Bar, создается новое private свойство $c в классе Bar со значением 'c'.
Поэтому нет ошибки при обращении к private свойству родителя, и новое private свойство создается в классе-наследнике.
При обращении к private свойству родителя из класса-наследника происходит создание нового private свойства в классе-наследнике, а не прямое обращение к private свойству родителя. Это связано с тем, что private свойства доступны только внутри класса, в котором они были объявлены, и не могут быть доступны в классах-наследниках напрямую.
Поэтому при обращении к private свойству родителя из класса-наследника происходит создание нового private свойства в классе-наследнике со значением, переданным при обращении. В данном случае, когда мы обращаемся к private свойству $c класса Foo из объекта $bar класса Bar, создается новое private свойство $c в классе Bar со значением 'c'.
Поэтому нет ошибки при обращении к private свойству родителя, и новое private свойство создается в классе-наследнике.