*** $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的別名,而不要發送或復制快捷方式到其他地方而產生快捷方式的復制?

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM