我对这段代码感到困惑
<?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行
请帮助我解决它!
答案 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
。