Я использую стабильную версию PHP 5.3, и иногда я сталкиваюсь с очень непоследовательным поведением. Насколько мне известно в наследовании, все атрибуты и методы (частные, общедоступные и защищенные) в супер классе передаются дочерним классом.Php Inheritance
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 :: $ _ определяется как «общедоступный», он не дает ошибок. PHP имеет собственные правила OO ???
Благодаря
Edit: Теперь все ясно. На самом деле я думал, что в «наследовании» создается новый класс и наследует всех членов, независимых от его предка. Я не знал «доступ» к правилам, и правила наследования одинаковы.
Редактировать В соответствии с вашими комментариями этот фрагмент должен дать ошибку. Но он работает.
class Foo
{
private $bar = "baz";
public function getBar()
{
return $this->bar;
}
}
class Bar extends Foo
{}
$o = new Bar;
echo $o->getBar(); //baz
Нет. Эти правила точно такие же, как в Java и C++, из которых была взята объектная модель PHP. – troelskn
Поскольку getBar() определен в родительском классе, он может получить доступ к переменной частного члена. –
return $ this-> bar; Здесь $ this относится к объекту Bar, а класс Bar не имеет переменной $ bar. Как это могло произойти? – jsonx