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