“PHP问题”__php“不完整”类;

“PHP问题”__php“不完整”类;,php,session,codeigniter,object,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; 它返回一个

我正在使用CodeIgniter开发一个网站,并创建了一个用户和一个会话:

$user->first_name = 'Gerep';
$user->gender = 'M';
$user->age = '26';


$this->session->set_userdata('user', $user);
但当我尝试访问会话对象时:

echo $this->session->userdata('user')->first_name;
它返回一个错误:
类的对象\uuu PHP\u不完整\u类无法转换为字符串

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


谢谢

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


您可以通过使用来解决问题。

解决方案可行,但您需要确保在会话之前阅读类对象定义:

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

查看是否有任何自动加载($class),并将其更改为使用spl\U autoload\U 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');
这样,您就可以使用所有PHP5.3功能(而且您不会对composer autoloads和CI有任何问题,;D)

解释 如果在使用PHP5.2一段时间后,您开始使用PHP>5.3和所有OO编码方式,您将开始使用
spl\u autoload\u register
。对于CI,在使用PHP5.2的项目中,由于无法使用
spl\u autoload\u register
人们使用一种已知的黑客方法,使用他们通常在config.PHP文件上编写的
函数\uu autoload($class)
自动加载类。
问题是,当您将两者混合使用时,
spl\u autoload\u register
函数将覆盖您的
\u autoload
类,并且问题所要求的错误将出现。

这最近发生在我身上,阅读解决方案给了我一个想法。第一个问题是
会话\u start
早于
自动加载
,这就是错误所在。您必须声明您的
autload
或包含此项,然后您可以执行
会话\u start
会话\u start()的位置很重要,因为脚本是从上到下加载的。当您在cllass(对象)之前加载spl_autoload会话之前调用它时,它不知道将数据放在哪里,因此它被创建为\uuuuuPHP\uComplete\uClass对象。 之前:

结果:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ 之后:


结果:用户对象([id]=>…)

会话已自动加载到autoload.php文件中,不是吗?我不知道脚本的作用。但我知道的是:如果您将一个对象放入$\u会话,PHP将序列化它以存储它,并且在再次访问它时取消序列化。如果类还没有被PHP解析/加载,您将得到这样一个错误。我建议你检查一下到底是哪个物体造成的。如果您
var\u dump()
对象,您可以在有问题的对象上看到
\uuuphp\u complete\u Class
。是的……使用var\u dump,我可以看到对象需要的样子,但类型是\uuu PHP\u complete\u Class。我要再次检查我的课程…我不知道课程开始的位置会导致他报告的错误。您能进一步解释一下吗?模型不能装入阵列库中
 session_start();

 spl_autoload_register(function($class){
     require_once 'classes/'.$class.'.php';
 });
 spl_autoload_register(function($class){
 require_once 'classes/'.$class.'.php';
 });

 session_start();