創(chuàng)建核心系統(tǒng)類
每次CodeIgniter運行時都有很多基礎(chǔ)類作為核心框架的一部分被自動初始化.但你也可以使用經(jīng)過你修改的類來替換甚至擴展這些原始的核心系統(tǒng)類.
大多數(shù)用戶一般不會有這種需求,但對于那些想較大幅度的改變CodeIgniter的人來說,我們依然提供了替換和擴展核心系統(tǒng)類的選擇.
注意:? 改變系統(tǒng)核心類會產(chǎn)生很大影響,所以在你做之前必須清楚地知道自己正在做什么.
系統(tǒng)類清單
以下是系統(tǒng)核心文件的清單,它們在每次CodeIgniter啟動時被調(diào)用:
- Benchmark
- Config
- Controller
- Exceptions
- Hooks
- Input
- Language
- Loader
- Log
- Output
- Router
- URI
- Utf8
替換核心類
要使用你自己的系統(tǒng)類替換默認類只需簡單的將你自己的 .php 文件放入本地文件夾 application/core
application/core/some-class.php
如果這個文件夾不存在你可以自己創(chuàng)建一個.
只要你自定義的文件名與默認的完全一樣,它就會自動替換原有的類.
要注意的是你自定義的類必須以CI作為前綴,例如你自己建立了Input.php類的名字必須是:
class CI_Input {
}
擴展核心類
如果你需要在現(xiàn)有類庫中加入一兩個新的功能,那就完全不必要替換整個類庫文件.你只需簡單地擴展(繼承)現(xiàn)有的類,擴展一個類就像在類中增加一些例外:
- 擴展的類必須申明由母類擴展而來.
- 新擴展的類所在的文件必須以 MY_ 為前綴(這個選項是可配置的,下面有說明).
例如,要擴展原有的Input 類,你應(yīng)該新建一個文件名為application/core/MY_Input.php, 并按如下聲明你的類:
class MY_Input extends CI_Input {
}
注意:如果你需要在類中使用構(gòu)造函數(shù),你必須在構(gòu)造函數(shù)中顯式繼承母類構(gòu)造函數(shù):
class MY_Input extends CI_Input {
????function __construct()
????{
????????parent::__construct();
????}
}
Tip:? 所有在你的新類中定義的函數(shù)如果與母類中函數(shù)的命名完全一樣,這些函數(shù)就能取代母類中原有的函數(shù) (這也被稱為"方法覆蓋").這允許你在本質(zhì)上改變CodeIgniter的核心.
如果你擴展了控制器核心類,那么也要在你的應(yīng)用程序控制器的構(gòu)造函數(shù)中使用這個新類。
class Welcome extends MY_Controller {
????function __construct()
????{
????????parent::__construct();
????}
????function index()
????{
????????$this->load->view('welcome_message');
????}
}
自定義前綴
要設(shè)定你自己的子類前綴,請打開application/config/config.php 文件并找到這一項:
$config['subclass_prefix'] = 'MY_';
請注意所有原始CodeIgniter類庫以 CI_ 作為前綴,所以請勿以CI_作為你自己的前綴.所有的擴展核心類必須放到core目錄中!
?