Не удалось получить динамические переменные экземпляра через отражение PHP - PullRequest
3 голосов
/ 06 февраля 2011

Мне не удалось получить динамические переменные экземпляра с помощью отражения PHP

Пример кода:

<?php

class Foo
{
    public function bar()
    {         
        $reflect = new ReflectionClass($this);
        $props   = $reflect->getProperties();
        var_export($props);
        die;
    }
}

$foo = new Foo();
$foo->a = "a";
$foo->b = "b";

$foo->bar(); // Failed to print out variable a and b

Есть идеи?

Ответы [ 2 ]

7 голосов
/ 06 февраля 2011

ReflectionClass::getProperties() получает только свойства , явно определенные классом. Чтобы отразить все свойства, заданные для объекта, используйте ReflectionObject, который наследуется от ReflectionClass и работает с экземплярами времени выполнения:

$reflect = new ReflectionObject($this);

Или, как Тим Купер говорит , забудьте про рефлексию и просто используйте get_object_vars().

3 голосов
/ 06 февраля 2011

Вы не можете использовать ReflectionClass в этой ситуации. Замените переменную $props на следующую, чтобы она работала:

$props = get_object_vars($this);

Если нет другого метода, который вам нужно вызвать из ReflectionObject (см. BoltClock's answer ), то это самое простое решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...