我有一个项目,上一个开发人员在将对象存储到数据库之前忘记序列化对象。现在我有:
stdClass::__set_state(array(
'id' => '1',
'name' => 'John',
'first_name' => 'John',
'middle_name' => 'Montel',
))
我想以专业的方式做到这一点并从这个变量中获取对象。 我希望以经典对象访问方式访问此对象数据$ obj-> name; 我知道以前对象被序列化时很容易做到。但现在我拥有了我拥有的东西。
谷歌研究了2个小时 - 目前没有任何想法。谢谢你的帮助!答案 0 :(得分:0)
这实际上是使用var_export获得的序列化表单,它返回有效的PHP代码。从手册:
var_export - 输出或返回a的可解析字符串表示形式 变量
如果序列化字符串中的类名称为'X',如'X :: __ set_state ...',则可以在'X'中定义'__set_state'方法,代码为:
$serializedObj = "X::__set_state(array('id' => '1','name' => 'John',...))";
eval('$myObj = '.$serializedObj).';'
之后你可以这样做:
$name = $myObj->name;
由于该类是'stdClass',我认为你有2个选项:
stdClass::__set_state(
和最后)
空字符串,eval
剩下的数组。 stdClass
替换为您自己的班级X
,并在__set_state
中定义X
方法。