2013-02-10 36 views
1

我試圖防止自己在每個控制器中重複相同的代碼。所以我放置函數,獲取父控制器中的數據,我試圖通過子控制器中的數據。我怎麼能通過代碼的父控制器中的數據

class Frontend_Controller extends MY_Controller 
{ 
    public function __construct() 
    { 
     parent::__construct(); 
     $this->load->model('configOptionsModel'); 
    $this->db->where('configid = "2"'); 
     $specialdata['bgimage'] = $this->configOptionsModel->get();  
    }  
} 

這裏是孩子控制器

class Home extends Frontend_Controller { 

public function __construct() { 
     parent::__construct(); 
     print_r($this->specialdta); // line where error occurs 
     die(); 
    } 

    public function index() 
{ 
    $data['main_content'] = 'home'; 
    $this->load->view('frontEnd/template',$data); 
} 
} 

我收到以下錯誤代碼:

A PHP Error was encountered 
Severity: Notice 
Message: Undefined property: Home::$specialdta 
Filename: controllers/home.php 
Line Number: 9 

果然,9號線是:的print_r($這個 - > specialdta) ;

我知道如果你擴展一個控制器(類),你可以訪問父控制器(類)的方法和屬性,因爲它們被聲明爲public。

任何人都可以解釋我做錯了什麼?

問候,卓然

回答

1

笨不是魔術,並遵循PHP類規範和規則。像任何繼承模型一樣,要訪問父類中的變量,必須將它們分配給父代中的$this

$this->specialdata = $this->configOptionsModel->get();在父構造函數將爲你工作,但要小心像這樣瘋狂地分配數據屬性。在引擎和繼承鏈中的許多類下,CodeIgniter的核心可能有一些通用屬性保留,並且您不想覆蓋它們。

+1

一如既往,您的答案提供瞭解決方案和學習課程。很高興再次見到你。謝謝你的幫助。 – Zoran 2013-02-10 10:50:01

相關問題