Глобальная проверка допустимых свойств в 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;

Тогда вы можете использовать все общие функции массива

Другие вопросы по тегам