0

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

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

4

1 回答 1

0

这实际上是使用var_export获得的序列化形式,它返回有效的 PHP 代码。从手册:

var_export — 输出或返回变量的可解析字符串表示

如果序列化字符串中的类名是“X”,例如“X::__set_state...”,您可以在“X”中定义“__set_state”方法,代码如下:

$serializedObj = "X::__set_state(array('id' => '1','name' => 'John',...))";
eval('$myObj = '.$serializedObj).';'

之后你可以这样做:

$name = $myObj->name;

由于该类是“stdClass”,因此我认为您有两个选择:

  1. 用空字符串和剩余的数组替换变量中stdClass::__set_state(的最后一个。)eval
  2. 替换stdClass为您自己的类X__set_stateX.
于 2013-05-22T01:38:34.410 回答