2012-11-25 178 views
11

我對codeigniter很陌生, 我想知道控制器中構造函數的含義是什麼。我看到了下面的代碼在一個笨教程 -CodeIgniter控制器構造函數

class upload extends CI_Controller { 

    function __construct() { 
     parent::__construct(); 
     $this->load->helper(form); 
    } 

    // rest of the class... 

我的問題是當在構造函數調用 - (如控制器類實例化的每一個請求它接收)是叫每個控制器提供的請求時間

+1

您可以測試它自己:只是'的var_dump(時間())'在你的構造和刷新頁面看看會發生什麼。拋出的時間字符串會在頁面刷新時發生變化,所以它意味着每個請求都會實例化類。 – Melkor

回答

13

那麼,這是一個更普遍的PHP問題。無論如何,是的,魔術方法__construct()是在類的每個實例調用(自動),你可以在手冊中看到:http://www.php.net/manual/en/language.oop5.decon.php

通常,在CI是沒有必要調用構造函數,除非你真正想要一個。在你發佈的例子中,代碼在類的每個實例上加載助手 - 這與在每個方法中加載助手相同,只是節省了大量的輸入並確保它不會被遺忘。你可以選擇將你希望將alywas加載到相應自動加載數組中的庫/幫助程序/模型置於config/autoload.php中(在CI手冊中檢查「自動加載」)

一旦你在子控制器中定義了一個構造函數, '不得不調用父類的構造函數(郵件CI_Controller類),因爲主CI對象的創建位置和所有類都被加載,並且您的子控制器中也需要這些類。如果不這樣做,你的孩子班級將分開建造,不會繼承。

我希望我自己清楚,英語不是我的母語:)

3

構造是魔術從字面上看它稱爲魔術方法。 什麼讓構造器很酷,它會在任何方法之前爲你做些事情。所以,如果你有一個管理員類,並且有人應該登錄才能訪問它 - 你可以檢查構造函數中的登錄信息,如果他們沒有被授權,就會彈出它們。

在構造函數中,您可以加載您的類需要的模型,庫,幫助器等,並且它們將可用於該類中的任何方法。

您可以加載方法使用的變量。這對模型非常有用。

+2

當類被初始化時構造函數只被調用一次,還是每次調用控制器內部的方法時都調用它? – Prabhu

+0

@Prabhu只有一次,除非有新的請求到達 –

0

不要在最新版的Apache &笨使用_construct()功能

使用helperlin in index()功能