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

 

 使用場景:php

注意 get_instance 的使用場景,這個方法並非用在控制器中的。
而是用在控制器外面,好比類庫中,想操做 CI 超級對象的時候,超級對象實際上就是當前控制器的實例。windows


 

 

你隨便下個CI框架的源碼都會看到不少的get_instance() 函數,這個函數是用來獲取CI 的全局超級對象,CI 是單例模式的框架,全部全局有一個超級對象。由於只有一個實例,因此不管這個函數使用多少次都不會消耗資源的。通常來講,只有在helper或library中才使用get_instance。session

之前咱們都是這樣用的:$this->load->library('session');框架

$this只做用在你本身的控制器、模型、視圖中,若是你在自定義的類中也想使用CI的函數話,你就能夠這樣作:函數

//經過引用的方式賦給變量將使用原始的 CodeIgniter 對象this

$ci = &get_instance();url

//這樣就可使用ci的函數了spa

$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


對於"CI官方手冊說調用get_instance()函數時,要用&引用符號;緣由是爲了防止對象生成副本"這一句裏面的"防止對象生成副本",類比Unix中的硬連接、軟連接,是否是就是防止生成軟連接,就像windows中的,只生成某個軟件的啓動exe的別名,而不要發送或複製快捷方式到其餘地方而產生快捷方式的複製?

相關文章
相關標籤/搜索