php var_export对象 - 忘记在存储之前序列化

时间:2013-05-17 15:22:55

标签: php object serialization import

我有一个项目,上一个开发人员在将对象存储到数据库之前忘记序列化对象。现在我有:

stdClass::__set_state(array(
   'id' => '1',
   'name' => 'John',
   'first_name' => 'John',
   'middle_name' => 'Montel',
))

我想以专业的方式做到这一点并从这个变量中获取对象。 我希望以经典对象访问方式访问此对象数据$ obj-> name; 我知道以前对象被序列化时很容易做到。但现在我拥有了我拥有的东西。

谷歌研究了2个小时 - 目前没有任何想法。谢谢你的帮助!

https://bugs.php.net/bug.php?id=29361

1 个答案:

答案 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个选项:

  1. 替换变量中的stdClass::__set_state(和最后) 空字符串,eval剩下的数组。
  2. stdClass替换为您自己的班级X,并在__set_state中定义X方法。