Привести массив PHP в объект пользователя? - PullRequest
3 голосов
/ 25 декабря 2010

У меня есть массив, который я получаю из другого источника.Затем этот массив необходимо преобразовать в пользовательский класс, который я создал.

Причина, по которой я не могу использовать stdObject, заключается в том, что в моем классе есть пользовательский __get, а также несколько методов удобства.

Мне в основном нужно что-то вроде этого:

$obj = (MyClass) $array;

Что не выглядит возможным, это вызывает синтаксическую ошибку.

Ответы [ 3 ]

8 голосов
/ 25 декабря 2010

Создание конструктора, который принимает массив и создает объект из этого массива.

4 голосов
/ 17 декабря 2014

Может быть, вы могли бы достичь этого с MyClass::__set_state($array)

3 голосов
/ 25 декабря 2010

Есть способ, который я использовал ранее, но это скорее хак, вы можете преобразовать массив в стандартный класс, затем сериализовать его в строку, затем, используя манипуляции со строками, изменить имя класса и затем снять сериализацию объекта:

function ClassCaster($class, $object)
{
    return unserialize(preg_replace('/^O:\d+:"[^"]++"/', 'O:' . strlen($class) . ':"' . $class . '"', serialize($object)));
}

class SampleClass
{
    public function __wakeup(){ /*Generic wake up from serialization */}
}

$array = array(/* ... */);
$SampleClass = ClassCaster("SampleClass",(object)$array);

Это не симпатичный метод, но я считаю, что это единственный способ взломать.

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