Глобальная проверка допустимых свойств в PHP stdClass?
Можно ли проверить свойства из PHP stdClass? У меня есть несколько моделей, которые генерируются как stdClass. При их использовании я хотел бы проверить, существуют ли свойства, которые я вызываю, в каком-то Core-классе. Я заметил, что __get игнорируется stdClass...
Как можно проверить свойства из stdClass, если они существуют в объекте?
3 ответа
StdClass
объекты содержат только свойства, а не код. Таким образом, вы не можете ничего кодировать из "внутри" них. Таким образом, вы должны обойти этот "недостаток". В зависимости от того, что генерирует эти классы, это можно сделать, "перегружая" данные (например, с помощью Decorator), предоставляя нужную вам функциональность:
class MyClass
{
private $subject;
public function __construct(object $stdClass)
{
$this->subject = $stdClass;
}
public function __get($name)
{
$exists = isset($this->subject->$name);
#...
}
}
$myModel = new MyClass($model);
Использование get_object_vars()
перебирать stdClass
объект, затем используйте property_exists()
Функция, чтобы увидеть, существует ли текущее свойство в родительском классе.
Просто приведите его к массиву
$x = (array) $myStdClassObject;
Тогда вы можете использовать все общие функции массива