【发布时间】:2015-03-07 13:17:46
【问题描述】:
问题: 在这种情况下,如何避免获得 PHP Incomplete Class?
背景:
该代码是一个从表单接收 POST 变量的脚本,对 \$_SESSION['objectCart'] 执行一些操作,最后将访问者重定向到另一个页面。
$_SESSION['objectCart'] 包含文件中定义的“购物车”类的实例
__DIR__ . $lib . 'user.class.php'
当我运行脚本时,它会停止,进一步调查显示 __PHP__Incomplete 类。
我的代码:
require_once __DIR__ . $lib . 'utility.class.php';
require_once __DIR__ . $lib . 'productcatalog.class.php';
require_once __DIR__ . $lib . 'user.class.php';
require_once __DIR__ . $lib . 'cart.class.php';
session_start();
print_r( $_SESSION['objectCart'] );
HTML 输出:
__PHP_Incomplete_Class Object ( [__PHP_Incomplete_Class_Name] => cart [itemsExtended:protected] => Array ( [0] => Array ( [item_name] => ...
解决方案 - 部分:
一个会话已经开始,因为它通常是有这个问题的。它是通过放置来识别的
echo session_id();
在购物车类启动之前。
【问题讨论】:
-
嗨@MagnusN 参考这里:- stackoverflow.com/questions/2010427/…
-
我不确定您是否真的需要您正在尝试做的事情,但不是将原始实例保存到会话中,而是将其序列化保存
-
__php_incomplete 类在反序列化失败时创建。
-
我尝试使用序列化/反序列化命令,但没有成功。输出没有改变。奇怪的是,这个脚本已经运行了 6 个多月,在昨天之前从来没有出现过这样的问题。
-
也许会话在您调用 session_start() 之前(重新)开始了?可能是在您的代码之前执行的另一个脚本(文件),可能由自动加载器触发,可能 session.auto_start 已设置或...其他东西。仅出于测试目的,您可以在 session_start 之前添加对
session_id()的调用。如果它返回不同于空字符串的内容,则会话已经在运行。