为什么我不能将PHP类实例存储为SESSION变量

5 php variables session class instance

我有一个PHP脚本,从Dojo Ajax xhrGet调用中以两种方式调用.第一次使用"init"参数调用它会导致脚本创建StateList类的实例并读入状态名称的文件.

session_start();
@include('StateList.php');
require_once('phplog.php');

//start executing here
$comd=$_GET['nexturl'];
if($comd=="init") {
$st = new StateList("../data/statestxt.txt");
$_SESSION['statefile'] = $st;
}
Run Code Online (Sandbox Code Playgroud)

第二次和更多次,另一个xhrGet调用传递一个"getstate"参数,下面的代码尝试从SESSION数组中获取StateList类的实例.

if($comd =="getstate") {
$st= $_SESSION['statefile'];
phplog("size=".$st->getSize());
Run Code Online (Sandbox Code Playgroud)

}

但是,getSize()方法永远不会执行,也不能在重构的StateList类实例上调用任何其他方法.

请注意,这是一个PHP脚本,它在顶部包含类定义,因此类方法应该是已知的和可用的.

我在这里错过了什么?

Tom*_*igh 13

您需要在调用之前包含类定义session_start(),否则该对象将不会被正确反序列化并将成为其实例__PHP_Incomplete_Class.否则你所拥有的应该可以正常工作.


sch*_*ibk 1

您可能需要在存储 $st 对象/变量之前对其进行序列化。这将确保所有内容都保存到会话中。这绝对是面向对象代码的必经之路。当您想再次使用该数据时,必须将其反序列化

  • 会话变量会自动序列化和反序列化。 (7认同)