В двух словах: класс наследует функцию от своего родителя.Затем эта функция вызывается для дочернего элемента, но, похоже, все еще имеет область действия parent класса.Это ожидаемое поведение?
Рассмотрим следующий пример кода:
<?php
class OLTest {
private $var1 = 10;
public function getVar1() {
if (isset($this->var1)) {
return $this->var1;
} else {
return 'undefined';
}
}
public function getVar2() {
if (isset($this->var2)) {
return $this->var2;
} else {
return 'undefined';
}
}
}
class OLTest2 extends OLTest {
private $var1 = 11;
private $var2 = 20;
}
$oltest = new OLTest();
$oltest2 = new OLTest2();
echo "calling parent->getVar1\n";
echo $oltest->getVar1() . "\n";
echo "calling parent->getVar2\n";
echo $oltest->getVar2() . "\n";
echo "calling child->getVar1\n";
echo $oltest2->getVar1() . "\n";
echo "calling child->getVar2\n";
echo $oltest2->getVar2() . "\n";
?>
Насколько я понимаю, вывод должен быть:
calling parent->getVar1
10
calling parent->getVar2
undefined
calling child->getVar1
11
calling child->getVar2
20
Фактический вывод на моей машинеis:
calling parent->getVar1
10
calling parent->getVar2
undefined
calling child->getVar1
10
calling child->getVar2
undefined
Чтобы добавить к путанице, print_r($this)
в любой из функций покажет, что область действия действительно установлена на подкласс, но доступ к переменной невозможен.
Может кто-нибудь прояснить это для меня?
РЕДАКТИРОВАТЬ: я использую PHP в версии 5.3.3-1ubuntu9.5.