Я использую стабильный релиз PHP 5.3 и иногда сталкиваюсь с очень противоречивым поведением. Насколько я знаю, в наследовании все атрибуты и методы (частные, публичные и защищенные) в суперклассе передаются дочернему классу.
class Foo
{
private $_name = "foo";
}
class Bar extends Foo
{
public function getName()
{
return $this->_name;
}
}
$o = new Bar();
echo $o->getName();
//Notice: Undefined property: Bar::$_name in ...\test.php on line 11
Но когда атрибут Foo :: $ _ name определен как public, он не выдает ошибку. PHP имеет собственные правила OO ???
Спасибо
Редактировать: Теперь все ясно.
На самом деле я думал, что в «наследовании» создается новый класс, который наследует всех членов независимо от его предка. Я не знал, что правила «доступа» и правила наследования одинаковы.
Редактировать
Согласно вашим комментариям этот фрагмент должен дать ошибку. Но это работает.
class Foo
{
private $bar = "baz";
public function getBar()
{
return $this->bar;
}
}
class Bar extends Foo
{}
$o = new Bar;
echo $o->getBar(); //baz