1. 程式人生 > >$CI =& get_instance() 用法:關於CodeIgniter中get_instance() 函式

$CI =& get_instance() 用法:關於CodeIgniter中get_instance() 函式

使用場景:

注意 get_instance 的使用場景,這個方法並不是用在控制器中的。
而是用在控制器外面,比如類庫中,想操作 CI 超級物件的時候,超級物件實際上就是當前控制器的例項。

你隨便下個CI框架的原始碼都會看到很多的get_instance() 函式,這個函式是用來獲取CI 的全域性超級物件,CI 是單例模式的框架,所有全域性有一個超級物件。因為只有一個例項,所以無論這個函式使用多少次都不會消耗資源的。一般來說,只有在helper或library中才使用get_instance。

以前我們都是這樣用的:$this->load->library('session');

$this只作用在你自己的控制器、模型、檢視中,如果你在自定義的類中也想使用CI的函式話

,你就可以這樣做:

//通過引用的方式賦給變數將使用原始的 CodeIgniter 物件
$ci = &get_instance();
//這樣就可以使用ci的函數了
$ci->load->library('session');
要你自定義的類庫中訪問CodeIgniter的原始資源,你必須使用 get_instance() 函式.這個函式返回一個CodeIgniter super object.

一般來說在你的控制器函式中你可以通過 $this 呼叫任何可用的CodeIgniter函式:

$this->load->helper('url');
$this->load->library('session');


$this->config->item('base_url');
etc.
$this, 只直接作用在你自己的控制器,模型和檢視中.當你在自定義類中想使用CodeIgniter原始類時,你可以這樣做:

首先,定義CodeIgniter物件賦給一個變數:

$CI =& get_instance();

一旦定義某個物件為一個變數,你就可以使用那個變數名 取代 $this:

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

注意: 你將注意到get_instance()這個函式通過被引用的方式被傳遞:

$CI =& get_instance();

這十分重要. 通過引用的方式賦給變數將使使用原始的CodeIgniter物件,而不是建立一個拷貝

同時,請注意: 如果你使用php 4,那麼請最好不要在類的建構函式中呼叫 get_instance() .php4在引用位於建構函式中的CI super object時存在問題,因為物件只有在類完全例項化後才存在.

對於"CI官方手冊說呼叫get_instance()函式時,要用&引用符號;原因是**為了防止物件生成副本**"這一句裡面的"**防止物件生成副本**",類比Unix中的硬連結、軟連結,是不是就是防止生成軟連結,就像windows中的,只生成某個軟體的啟動exe的別名,而不要傳送或複製快捷方式到其他地方而產生快捷方式的複製?