2014-04-04 31 views
0

引起混亂的問題,不能想出一個好標題,但我會解釋,盡我所能。完全的對象在孩子的方法調用

我使用笨,並利用get_instance()功能,可以訪問CI超級對象的某些類。我在child構造函數中的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); 
    } 
} 

一個父類。當在childdoSomething()方法中打印時,我得到一個不完整的類對象。

編輯:

我相信我已經有所發現的問題。當CI創建其超級對象時使用控制器類。在出現問題的情況下,這是Login控制器。很明顯,當我通過引用進行分配時,名稱仍然存在,然後如果我不在我的Login控制器中,則它對於不完整的類有問題。我能「修復」它通過重新調用get_instance()函數的使用時它,但是這不是一個很好的解決方案。有任何想法嗎?

+0

通常情況下,當一個對象已經在$ _SESSION中序列化並且在該對象的原始類定義文件已被加載之前通過session_start()恢復時,您會遇到這種情況 –

+0

yes。我有自動加載設置,但這個特殊的實例不使用'$ _SESSION'。令人困惑的是在子構造函數中沒有問題,但不是子方法。 –

+0

但如果磁帶自動加載機註冊__after__你的session_start(),那麼它仍然可以產生問題....我正好在Laravel在會話存儲用戶對象,當用戶對象是從一個基本對象擴展了同樣的問題,但如果我沒有這種繼承關係,這不是問題 –

回答

0

所以經過了很多的期待,似乎我發現PHP手冊

Warning 
You can't use references in session variables as there is no feasible way to restore a reference to another variable. 

這就是爲什麼它工作在很多地方完全沒有問題的答案,但如果我從$_SESSION變量訪問它,像我登錄的用戶,我得到的錯誤。它在$_SESSION變量創建時存儲get_instance(),而不是像我需要的那樣引用。

感謝您的意見。