2010-01-11 159 views
5

我是OOP的新手,正在写我的第一个类。我为一家保险经纪人工作,并试图使用一个Class存储关于报价的事情,并将Object存储为会话变量。在会话变量中存储PHP对象

的是,当我查看会话变量,我得到:

sessionName   

__PHP_Incomplete_Class Object 
(
    [__PHP_Incomplete_Class_Name] => myClass 
    [brokerId] => 

谁能告诉我,为什么它的显示不完整的类名?

回答

5

确保在调用session_start()之前存在类定义,例如,

require_once 'class.MyClass.php'; 
session_start(); 

或设置unserialize_callback_func,将试图作为http://docs.php.net/function.unserialize描述加载类定义。

编辑:这也可以通过spl_autoload_register()完成。例如。

spl_autoload_register(function($name) { 
    // only a demo ...this might be insecure ;-) 
    require_once 'class.'.$name.'.php'; 
}); 
session_start(); 
echo '<pre>'; 
var_dump($_SESSION); 
echo '</pre>'; 
+0

这是正确的,忘了我已经回答:) – soulmerge 2010-01-11 14:41:19

1

我设法通过自己解决这一切,不知道如何。

我保证显示的值页的结构类似:

require_once("Class.php"); 
session_start(); 

$_SESSION['myObject']->printVariables(); 

这构造对象的页面是这样的:

# Include the class 
require_once($_SERVER['DOCUMENT_ROOT'] . "/Class.php"); 

# Instantiate a new policy 
$_SESSION['myObject'] = new quote('54'); 
$_SESSION['myObject']->printVariables(); 

我还相信,该页面显示调用对象没有使用任何序列化函数,因为它们似乎只会导致错误。

0

我用这

if (!is_object($_SESSION)) $_SESSION = new ArrayObject();