php get_object_vars () не может получить доступ к закрытым свойствам в дочернем объекте

1
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()?

Теги:
oop

1 ответ

2

Цитата из руководства:

Получает доступные нестатические свойства данного объекта в соответствии с областью действия.

(мой акцент)

Если вам действительно нужен доступ к приватным vars в родительском классе, вам нужно будет использовать отражение

РЕДАКТИРОВАТЬ

Альтернативой редактированию было бы переопределить toArray() в вашем дочернем классе и вызвать через него родителя toArray().

демонстрация

  • 0
    если это находится в области действия Test то как InhertiedTest->toArray() может получить доступ к его защищенным свойствам?
  • 0
    Поскольку метод toArray () определен в родительском классе, но он выполняется просто как метод в InheritedTest .... он унаследован от Test
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню