新增配套類別

在某些情況下,你可能需要開發一個類別,這個類別能使用 Codeigniter 一部分在控制器(Controller)已經現有的功能。 這是很簡單做到的,請看下面。

get_instance()

get_instance()
Returns:object of class CI_Controller

所有在你的控制器(Controller)方法裡已經實例化的類別即可存取 Codeigniter 本地的資源 簡單地通過使用 get_instance() 函數。這個函數回傳 Codeigniter 主物件。

一般來說,要呼叫 Codeigniter 的方法,你會使用 $this

$this->load->helper('url');
$this->load->library('session');
$this->config->item('base_url');
// etc.

$this ,只能在你的 Controllers、Models、Views 裡面執行,如果你想要在你的類別裡面使用 Codeigniter 類別,你可以參考下面作法: :

第一步,賦值給 CodeIgniter 物件到一個變數裡:

$CI =& get_instance();

一旦你已經賦值一個物件到變數上,你將會使用這個變數 取代$this

$CI =& get_instance();

$CI->load->helper('url');
$CI->load->library('session');
$CI->config->item('base_url');
// etc.

Note

在上面這個例子,你會注意到 get_instance() 函數 是傳入參考:

$CI =& get_instance();

這是非常重要的。賦予參考值允許你使用最原始 CodeIgniter 物件,而不是建立一個副本。

此外,如果你會使用 get_instance() 到其它類別上,賦予參考到變數上,是較好的行為。 這個方法你將不需要在每個方法裡面呼叫一次 get_instance()

例如:

class Example {

        protected $CI;

        // We'll use a constructor, as you can't directly call a function
        // from a property definition.
        public function __construct()
        {
                // Assign the CodeIgniter super-object
                $this->CI =& get_instance();
        }

        public function foo()
        {
                $this->CI->load->helper('url');
                redirect();
        }

        public function bar()
        {
                $this->CI->config->item('base_url');
        }

}

在上面的例子,在你實例化 Example 類別的時候,方法 foo() 以及 bar() 即可使用,不需要在其它地方再去呼叫 get_instance() 函數。