发现PHP不完整的对象错误?

时间:2013-06-28 17:46:57

标签: php

我对这段代码感到困惑

<?php

$input = 'O:1:"B":1:{s:6:"secret";s:6:"Got_it";}';
$o = unserialize($input);
//echo $o;  
print_r($o->secret);

?>

我试图获得$ o-&gt;秘密,但它发生了这个错误:

  

注意: main():脚本尝试执行方法或访问a   不完整对象的属性。请确保上课   您正在尝试操作的对象的定义“B”已加载   之前 unserialize()被调用或提供__autoload()函数来加载/home/mikun/public_html/tested.php中的类定义   第6行

请帮助我解决它!

2 个答案:

答案 0 :(得分:4)

您的代码正在反序列化B类的对象。

$input = 'O:1:"B":1:{s:6:"secret";s:6:"Got_it";}';
               ^

PHP不能反序列化对象,除非它知道类B应该是什么样的类,因此首先需要定义。在这种情况下,您需要在<{strong> B调用之前为unserialize() 指定类定义。例如:

class B {
    public $secret;
    public $param2;
};

$input = 'O:1:"B":1:{s:6:"secret";s:6:"Got_it";}';
$o = unserialize($input);
//$o is now an instance of class B
print_r($o->secret); //prints "Got_it"

答案 1 :(得分:1)

如果您不需要B类来构建数据,则可以通过将B类编辑为stdClass来修复序列化字符串。为此,您将更改

O:1:"B":1:{s:6:"secret";s:6:"Got_it";}

O:8:"stdClass":1:{s:6:"secret";s:6:"Got_it";}

您会注意到O:1变为O:8。这告诉php,对象名称现在是八个字符stdClass