2015-12-07 3 views
0

Теоретически я знаю, что частные члены не наследуются. Но то, что дает мне мой код, действительно запутывает. Это выглядит следующим образом:приватные атрибуты получения унаследованных

class A{ 

private $ name; 

private $age; 

private $weight; 

private $height; 

function __construct ($Name, $Age, $Weight, $Height) 

{ 

$this->name = $Name; 

$this->age = $Age; 

$this->weight = $Weight; 

$this->height = $Height; 

} 

} 

// another class that extends A 

class B extends A { 

private $gender; 

private $profession; 

function __construct ($Gender, $Profession) 

{ 

$this->gender = $Gender; 

$this->profession = $Profession; 

} 

} 

$aB = new B ("Male", "Teacher"); 

var_dump ($aB); 

кодовых значения выходов для атрибутов B, которые, как ожидается, но он также пытается получить значение атрибутов A и выводит значение NULL для всех атрибутов A. Короче говоря , он выводит имя и значение из 6 переменных (атрибутов). Почему он включает атрибуты и значения класса A, если частные свойства не наследуются.

ответ

1

Класс B не имеет доступа к частной собственности.

Но var_dump может получить доступ к нему, потому что это внутренняя функция, и у нее есть «сила» для просмотра всего объекта. Однако ваш код не имеет такой мощности.

object(B)#1 (6) { ["gender":"B":private]=> string(4) "Male" ["profession":"B":private]=> string(7) "Teacher" ["name":"A":private]=> NULL ["age":"A":private]=> NULL ["weight":"A":private]=> NULL ["height":"A":private]=> NULL }

+0

Спасибо! Вот почему в B не работает следующая строка кода: echo «$ this-> name»; – user5648637

+0

да. если вы хотите наследовать свойство, просто измените 'private' на 'protected' – Andrey

Смежные вопросы