Глобальная проверка допустимых свойств в PHP stdClass? - PullRequest
2 голосов
/ 17 ноября 2011

Можно ли проверить свойства из PHP stdClass?У меня есть несколько моделей, которые генерируются как stdClass.При их использовании я хотел бы проверить, существуют ли свойства, которые я вызываю, в каком-то Core-классе.Я заметил, что __get игнорируется stdClass ...

Как можно проверить свойства из stdClass, если они существуют в объекте?

Ответы [ 3 ]

6 голосов
/ 17 ноября 2011

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);
5 голосов
/ 17 ноября 2011

Используйте get_object_vars() для итерации объекта stdClass, затем используйте функцию property_exists(), чтобы проверить, существует ли текущее свойство в родительском классе.

0 голосов
/ 17 ноября 2011

Просто приведите его к массиву

$x = (array) $myStdClassObject;

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

...