2015-03-10 3 views
-1

Если свойство определено в дочернем классе, это свойство доступно внутри методов родительского класса? Я понимаю, что свойства родителя наследуются дочерним элементом, но являются ли дочерние свойства доступными в родительском? Например:Переменная видимость в объектно-ориентированном PHP

class My_Parent { 
    public function echoVar() { 
     echo $this->var; 
    } 
} 

class My_Child extends My_Parent { 
    public $var = 'Henry'; 
} 

$obj = new My_Child; 
$obj->echoVar(); // Henry or 'undefined'? 
+0

@ Rizier123: Неправильно, но не по причине, которую вы описываете. –

+0

Вы должны усовершенствовать свой вопрос, заменив комментарий '// Henry или 'undefined'?' С фактическим результатом. Как известно, вы предлагаете вам даже не попробовать свой собственный код, что, вероятно, не так. –

+1

Вы запрашиваете вывод своего кода? Почему бы просто не запустить его, и вы увидите? –

ответ

0

Расширение класса довольно просто: ваш объект будет содержать все методы, как вы ожидаете. Кроме того, любая общедоступная переменная будет там, в порядке приоритета (дочерняя переменная может перезаписать родительскую).

В вашем случае, ваш Parent является определение метода, который будет попытки найти переменную $var, которая действительно существует в дочернем классе! Все идет нормально, и Генри возвращается. Песочница здесь: http://sandbox.onlinephpfunctions.com/code/2eb0b764c2be94755ce300deeaa2ad0714d82bcf

Однако, пожалуйста, запустите свой код в следующий раз. Хорошо? Все это можно было бы сделать без необходимости задавать вопрос и сэкономить все время.

+2

Вопрос не в получении результата прогона, а в понимании того, как работает наследование. Даже если он напечатает «Генри», все равно интересно, как это происходит. И вы дали ответ! –

+0

@ Андреи Николаенко: Пытался покрыть все основания на вводящий в заблуждение вопрос. : p –

+1

Это проблематично, если свойство $ var ___ не существует___ в дочернем классе; в практическом плане, разработайте свои приложения, чтобы родитель мог точно знать, что свойство $ var существует, определяя свойство в родительском –

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