PHP имеет ReflectionClass и ReflectionObject .Вы можете использовать ReflectionObject
для StdClass
.
$props = (new ReflectionObject(($var))->getProperties();
В противном случае вы можете использовать get_object_vars :
$props = get_object_vars($var);
Разница между ними составляетчто ReflectionClass
будет возвращать только исходные свойства класса.
Предположим, у вас есть следующий класс:
class Test {
public $foo;
}
Затем вы создаете его экземпляр и назначаете новое свойство:
$instance = new Test;
$instance->bar = 'foo';
Тогда при извлечении свойств класса с помощью ReflectionClass
:
(new ReflectionClass($instance))->getProperties();
Он не возвращает свойство bar
:
[
ReflectionProperty {#3059
+name: "foo",
+class: "Test",
modifiers: "public",
},
]
Следовательно, пустой массив при использовании ReflectionClass
с StdClass
.Принимая во внимание, что ReflectionObject
вернул бы оба:
(new ReflectionObject($instance))->getProperties();
Выход:
[
ReflectionProperty {#3071
+name: "foo",
+class: "Test",
modifiers: "public",
},
ReflectionProperty {#3073
+name: "bar",
+class: "Test",
modifiers: "public",
},
]
Источник: https://gist.github.com/wjaspers/9353164