新增系統核心類別

每次 CodeIgniter 執行時,有幾個基礎類別會自動初始化,成為核心框架的一部分。不過還是有可能用你自己的版本來置換甚至擴充這些系統核心類別。

大部分的使用者永遠不會需要這樣做,但是這個選項還是保留給那些想要大幅置換或擴充 CodeIgniter 核心的人。

Note

介入核心系統可能引發許多隱藏的問題,所以請在這麼做之前確定你知道你自己在做什麼。

系統類別列表

以下是一個系統核心檔案的清單,每次 CodeIgniter 執行時都會呼叫他們: :

  • Benchmark
  • Config
  • Controller
  • Exceptions
  • Hooks
  • Input
  • Language
  • Loader
  • Log
  • Output
  • Router
  • Security
  • URI
  • Utf8

更換核心類別

要用你自己的系統核心類別來置換預設的,只要將你自己的版本放在 application/core 目錄裡:

application/core/some_class.php

如果這個目錄不存在,你可以自己新增。

任何與在上述清單中檔案名稱相符的檔案都會被載入,取代系統正常使用的。

請注意,你的類別名稱必須使用 CI 作為前置字串。例如,如果你的檔案名稱是 Input.php ,那類別名稱將是:

class CI_Input {

}

繼承核心類別

如果你所要做的只是在現存程式庫中加入一些功能,例如增加一兩個函數,那置換掉整個程式庫就太過火了。在這個狀況下,擴充類別是比較好的做法。擴充一個類別與用一些例外來取代一個類別幾乎是相同的: :

  • 類別宣告必須繼承(extend)父類別
  • 你的新類別名稱與檔名必須使用 MY_ 前置字串(這是可設定的,請見下述)。

例如,要擴充一個內建的 Input 類別,你要先新增檔名為 application/core/MY_Input.php 的檔案,然後這樣宣告你的類別:

class MY_Input extends CI_Input {

}

Note

如果你需要在你的類別中使用建構函數(Constructor),確定有在裡面擴充父類別的建構函數(Constructor):

class MY_Input extends CI_Input {

        public function __construct()
        {
                parent::__construct();
        }
}

Tip: 你類別中任何與父類別中相同名稱的函數,將會取代父類別的(這一般叫做“方法覆蓋 method overriding”)。這個方式允許你實質上改變 CodeIgniter 的核心。

如果你要擴充控制器(Controller)核心類別,請確定有在你的應用程式控制器(Controller)的建構函數(Constructor)中擴充你的新類別。

class Welcome extends MY_Controller {

        public function __construct()
        {
                parent::__construct();
                // Your own constructor code
        }

        public function index()
        {
                $this->load->view('welcome_message');
        }
}

自訂子類別的前綴字串

要設定你自己的子類別前置字串,請編輯你的 application/config/config.php 檔案並修改下面的項目:

$config['subclass_prefix'] = 'MY_';

請注意,所有的 CodeIgniter 內建程式庫都使用 CI_ 前綴字串,所以不要用它來當作你自己的前綴字串。