W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
每次CodeIgniter 運行時,都有一些基礎(chǔ)類伴隨著核心框架自動的被初始化。但你也可以使用你自己的類來替代這些核心類或者擴展這些核心類。
大多數(shù)用戶一般不會有這種需求,但對于那些想較大幅度的改變 CodeIgniter 核心的人來說,我們依然提供了替換和擴展核心類的選擇。
注解
變動核心系統(tǒng)類意味著一系列的挑戰(zhàn),所以,請三思后行。
以下是系統(tǒng)核心文件的列表,它們在每次 CodeIgniter 啟動時被調(diào)用:
要使用你的系統(tǒng)類替換 CodeIgniter 默認(rèn)的系統(tǒng)類時,首先確保 Autoloader 能找到你的類;其次你的新類繼承了正確的接口,同時修改 Service 以保證加載的是你自己的類。
例如,你有一個名為 AppLibrariesRouteCollection
的新類想要替換系統(tǒng)的核心類,你應(yīng)該像這樣創(chuàng)建你的類:
class RouteCollection implements \CodeIgniter\Router\RouteCollectionInterface
{
}
然后,你應(yīng)該修改路由文件來加載你自己的類:
public static function routes($getShared = false)
{
if (! $getShared)
{
return new \App\Libraries\RouteCollection();
}
return self::getSharedInstance('routes');
}
如果你需要往一個現(xiàn)有的庫里添加一些功能-或許只是添加一兩個方法,重寫這整個庫顯然是沒必要的。這時更好的通常是對其中的類進行擴展。對類進行擴展與替換掉類幾乎相同,除了一點:
比如,繼承 RouteCollection 這個原生類,你應(yīng)該這樣聲明:
class RouteCollection extends \CodeIgniter\Router\RouteCollection
{
}
如果你需要在類中使用構(gòu)造器來確保子類繼承了父類的構(gòu)造器:
class RouteCollection implements \CodeIgniter\Router\RouteCollection
{
public function __construct()
{
parent::__construct();
}
}
Tip: 在你自己的類中,所有與父類方法名相同的函數(shù)將會覆蓋父類方法,此為”方法覆蓋”. 這樣你就可以充分地改動CodeIgniter 的核心類。
你若擴展了控制器核心類,則需確保你的新類繼承了應(yīng)用下的控制器類的構(gòu)造器:
class Home extends App\BaseController {
}
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: