ci中對核心類、輔助類和函式的擴充套件是相當方便的,配置檔案中指定了subclass_prefix擴充套件字首,預設為my_,擴充套件時需要以該配置為字首,下面整理下擴充套件方式。
1、擴充套件核心類
核心類位於system/core下,其中大部分類會在初始化的時候自動載入。擴充套件核心類的方式有兩種:替換核心類和繼承核心類。
替換核心類
當application/core目錄下存在與syst同名的檔案時會自動替換掉核心類。以loader.php為例,當建立application/core/loader.php後會自動載入該類,由於該類為系統核心類,所以,如果loader.php未實現ci_loader類中的方法則會報錯,如:
class ci_loader
替換核心類需要重寫其中的所有方法,以免影響核心功能。但大部分時候並不需要重寫整個核心,基本上只是增加某些方法,這個時候可以採取繼承的方式。
繼承核心類
繼承核心類需要以subclass_prefix為字首,如擴充套件input類,需建立application/core/my_input.php,並且my_input需要繼承ci_input類,如:
<?php if ( ! defined('basepath')) exit('no direct script access allowed');
class my_input extends ci_input
// clean utf-8 if supported
if (utf8_enabled === true)
return $str;
}}/* end of file my_input.php */
/* location: ./application/core/my_input.php */
2、擴充套件ci類庫
system/libraries下實現了一些輔助類,當有需要擴充套件這些類時,和核心類的處理方式是一樣的,只不過目錄變成了application/libraries
3、擴充套件輔助函式
輔助函式存放於application/helpers目錄下,輔助函式的「繼承」方式與上面相同。因為ci的輔助函式都有使用function_exists來判斷是否存在,所以也可以達到「重寫」的目的。如在array中新增乙個陣列排序方法:
<?php if ( ! defined('basepath')) exit('no direct script access allowed'www.cppcns.com);
/** * 對二維陣列進行排序
* * @param array $data 需要排序的字段
* @param array $sort_field 按哪個鍵進行排序,如果不是所有鍵中都含有該字段則返回原陣列
* @param array $sort_type 排序方式 sort_asc 公升序 sort_desc 降序
* @return array
*/function array_field_sort($data, $sort_field, $sort_type = sort_asc)
$sort_arr = array();
foreach($data as $key => $val)
} if(count($sort_arr) == 程式設計客棧count($data))
return $data;
}/* end of file my_array_helper.php */
/* location: ./application/helpers/my_array_helper.php */
總的來說,可以對ci框架system目錄下的大部分內容進行重寫,靈活度很高,擴充套件也很方便。但有時候也需要注意一下,並不是擴充套件的越多就越好,確保ci實現不了的功能再去擴充套件。最後既然ci提供了擴充套件的功能,就不要直接去修改system下的內容了。
python核心擴充套件
def get fb num 初始化數列 fb list 1,2 for i in range 0,num 2 初始化列表最後一位為0,防止報錯 fb list i 2 fb list i fb list i 1 return fb list從上我們得到了乙個固定位數的斐波那契數列,由此引申出乙個問...
Codeigniter 基本配置
config base url config index page index.php codeigniter 根目錄下的 index.php 檔名,codeigniter 會使用它來生成鏈結位址。如果使用隱藏 index.php 的 url,將其設定為空字串 config index page c...
CodeIgniter使用總結
最近在使用codeigniter開發乙個企業站專案,一開始是把前台和後台分開作為兩個單獨的專案,但後來想想為啥不能放在乙個專案裡呢,便有了改造的想法。先上一張最終的目錄結構圖 config routes.php controllers backend frontend core my control...