我有一个从其他来源检索的数组。然后需要将此数组转换为我创建的自定义类。
我无法使用stdObject的原因是因为我的班级有自定义__get
以及一些方便的方法。
我基本上需要这样的东西:
$obj = (MyClass) $array;
哪种看起来不可能,会导致语法错误。
答案 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);
这不是一个漂亮的方法,但我相信它是唯一的黑客。