【发布时间】:2014-05-17 10:22:19
【问题描述】:
令人困惑的问题,无法想出一个好的标题,但我会尽力解释。
我正在使用 CodeIgniter,并利用 get_instance() 函数访问某些类中的 CI 超级对象。我有一个调用超级对象的父类
abstract class parent{
/**
* properties
*/
protected $CI;
/**
* constructor
*/
public function __construct(){
$this->CI =& get_instance();
}
还有很多子类
class child extends parent{
public function __construct(){
//parent
parent::__construct();
print_r($this->CI);
}
public function doSomething(){
print_r($this->CI);
}
}
在child 构造函数中打印时,CI 对象很好。在 child doSomething() 方法中打印时,我得到一个不完整的类对象。
编辑:
我相信我已经在一定程度上发现了问题。当 CI 创建它的超级对象时,它使用控制器类。在出现我的问题的情况下,这是Login 控制器。显然,当我通过引用分配时,该名称会继续存在,然后如果我不再在我的 Login 控制器中,则存在不完整类的问题。我可以通过在使用 get_instance() 函数时重新调用它来“修复”它,但这不是一个很好的解决方案。有什么想法吗?
【问题讨论】:
-
通常情况下,当一个对象在 $_SESSION 中被序列化,并在该对象的原始类定义文件被加载之前通过 session_start() 恢复时,您会遇到这种情况
-
是的。虽然我有自动加载设置,但这个特定实例没有使用
$_SESSION。令人困惑的是它在子构造函数中很好,但在子方法中不行。 -
但是如果自动加载器是在您的 session_start()之后注册的,那么它仍然会产生问题......我在会话中存储用户对象时遇到了完全相同的问题在 Laravel 中,当 User 对象是从基础对象扩展而来的,但如果我没有那个继承就不是问题
-
这会给您带来问题吗?我以前做过这种事情,但从来没有遇到过任何问题——当然,我从来没有想过
print_rCI 对象:-) -
我的
session_start被设置为预控制器挂钩,我的自动加载在我的config.php文件中完成,该文件在引导程序的早期处理
标签: php codeigniter