将PHP数组转换为用户对象?

时间:2010-12-25 00:54:07

标签: php object casting

我有一个从其他来源检索的数组。然后需要将此数组转换为我创建的自定义类。

我无法使用stdObject的原因是因为我的班级有自定义__get以及一些方便的方法。

我基本上需要这样的东西:

$obj = (MyClass) $array;

哪种看起来不可能,会导致语法错误。

3 个答案:

答案 0 :(得分:8)

创建一个构造函数,该构造函数接受一个数组并从该数组中构造该对象。

答案 1 :(得分:4)

也许你可以用MyClass::__set_state($array)

来实现它

答案 2 :(得分:3)

这是我之前使用的一种方式,但更多的是黑客,你可以将数组转换为stdclass然后将其序列化为字符串,然后使用字符串操作更改类名,然后取消序列化对象: / p>

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);

这不是一个漂亮的方法,但我相信它是唯一的黑客。