我正在开发使用CodeIgniter网站并创建了一个用户和会话:
$user->first_name = 'Gerep';
$user->gender = 'M';
$user->age = '26';
$this->session->set_userdata('user', $user);
但是,当我尝试访问会话对象:
echo $this->session->userdata('user')->first_name;
它返回我一个错误:Object of class __PHP_Incomplete_Class could not be converted to string
我一直努力这样的,从未有过这个问题。
谢谢!
类定义还没有被加载,当PHP试图反序列化对象的会话。
您可以通过使用Autoloading解决您的问题。
解决方案的工作,但你需要确保类对象定义会话前阅读:
$autoload['libraries'] = array('**our class**','session','form_validation');
你看,如果你有任何__autoload($类),并改变它使用spl_autoload_register()方法。例:
function __autoload($class)
{
if (file_exists(APPPATH . 'core/' . $class .EXT)) {
require_once APPPATH . 'core/' . $class . EXT;
} else {
if (file_exists(APPPATH . 'libraries/' . $class . EXT)) {
require_once APPPATH . 'libraries/' . $class . EXT;
}
}
}
将被更改为:
function CIautoload($class)
{
if (file_exists(APPPATH . 'core/' . $class .EXT)) {
require_once APPPATH . 'core/' . $class . EXT;
} else {
if (file_exists(APPPATH . 'libraries/' . $class . EXT)) {
require_once APPPATH . 'libraries/' . $class . EXT;
}
}
}
spl_autoload_register('CIautoload');
这样,您就可以使用所有PHP 5.3的功率(你不会有作曲家自动加载和CI的问题; d)
如果使用PHP 5.2一段时间后,你开始使用PHP> 5.3和编码的所有OO方式,你将开始使用spl_autoload_register
。随着CI,在PHP 5.2的项目,因为你不能使用spl_autoload_register
人使用已知的黑客使用function __autoload($class)
,他们通常在config.php文件写信给autolad类。问题是,当你混合两者的spl_autoload_register
功能将覆盖__autoload
类和问题提出的错误会出现。
这发生在我最近,阅读解决方案给我一个想法。第一个问题是,session_start
是以前比autload
,这就是错误。您必须声明你的autload
或包括这点,你可以做session_start
。
在session_start()的位置从顶部装载bothom重要becouse脚本。当你调用之前spl_autoload会话之前cllass(对象)加载,不知道往哪里放数据,所以它已经创建__PHP_Incomplete_Class对象。之前:
session_start();
spl_autoload_register(function($class){
require_once 'classes/'.$class.'.php';
});
结果:__PHP_Incomplete_Class对象([__PHP_Incomplete_Class_Name] =>用户[ID] ...)后:
spl_autoload_register(function($class){
require_once 'classes/'.$class.'.php';
});
session_start();
结果:用户对象([ID] => ...)