class test
{
private $foo;
protected $bar;
public function toarray()
{
return get_object_var($this);
}
class inheritedTest extends test
{
private $baz;
protected $baf;
}
$test=new Test();
test->toarray(); //does acccess private, protected
$itest= new inhertiedTest();
$itest->toArray(); // does access protected but not private
если я переопределяю toArray()
и вызывается parent toArray()
он работает нормально. Кажется, что get_object_var()
работает в контексте объявления. В этом случае свойства Test
видны. что происходит? как заставить его работать без переопределения toArray()
?
Цитата из руководства:
Получает доступные нестатические свойства данного объекта в соответствии с областью действия.
(мой акцент)
Если вам действительно нужен доступ к приватным vars в родительском классе, вам нужно будет использовать отражение
РЕДАКТИРОВАТЬ
Альтернативой редактированию было бы переопределить toArray() в вашем дочернем классе и вызвать через него родителя toArray().
Test
то как InhertiedTest->toArray()
может получить доступ к его защищенным свойствам?