CodeIgniter擴充套件核心類例項詳解

2022-10-06 09:48:10 字數 1873 閱讀 3877

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...