“__php_incomplete_class”的PHP问题

时间:2011-07-04 18:34:05

标签: php session codeigniter object

我正在使用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

我一直都是那样工作,从来没有遇到过这个问题。

谢谢!

5 个答案:

答案 0 :(得分:4)

当PHP试图在会话中反序列化对象时,尚未加载类定义。

您可以使用Autoloading来解决您的问题。

答案 1 :(得分:2)

解决方案有效,但您需要确保在会话之前读取类对象定义:

$autoload['libraries'] = array('**our class**','session','form_validation');

答案 2 :(得分:0)

看看你是否有任何__autoload($ class)并将其更改为使用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人们使用已知的hack来使用他们通常在config.php文件中编写的function __autoload($class)来自动化类。 问题是当你混合两者时,spl_autoload_register函数将覆盖你的__autoload类,并且会出现问题所引发的错误。

答案 3 :(得分:0)

最近我遇到这种情况,阅读解决方案给了我一个想法。第一个问题是session_start早于autload,这就是错误。您必须声明autload或包含此内容,然后才能执行session_start

答案 4 :(得分:0)

session_start()的位置很重要,因为脚本是从顶部加载到Bothom的。在spl_autoload会话在cllass(Object)之前加载之前调用它时,并且不知道将数据放在何处,因此已将其创建为__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] => ...)