當咱們使用術語"類庫"時,咱們通常指的是位於libraries 文件夾中的類,它們在wiki的"類庫參考"這個板塊被討論.在當前這個話題中,咱們將討論如何在 application/libraries 文件夾中創建你本身的類庫,並使它們與全框架的資源維持分離. php
做爲一個額外的功能,當你須要在原始類中簡單地添加一些功能時,CodeIgniter能使你的類庫extend 自原始類.你甚至能夠經過在application/libraries文件夾下安放同名類庫文件的方法來徹底替換原始類. html
總之: 數據庫
如下頁面將深刻介紹這三個概念. 數組
注意: 除了數據庫類沒法被擴展或替換,剩餘其餘類都可。 session
你的類庫文件必須保存在 application/libraries 文件夾,CodeIgniter將在這個文件夾中尋找並初始化它們. app
全部的類應有基礎原型(注意,這裏咱們以 Someclass 這個名字爲例): 框架
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');在全部的Controller 函數中,你能夠用如下的標準方式初始化你的類: ide
$this->load->library('someclass');當 someclass 是文件名時,不用加上".php"擴展名.這裏名字不分大小寫. 函數
一旦你自定義的類加載完畢,你能夠經過如下方式調用類,注意使用 小寫 的名字: codeigniter
$this->someclass->some_function(); // 對象的實例名永遠都是小寫的當初始化類庫時,你能夠經過第二個參數動態的傳遞數組到類的構造函數中去:
$params = array('type' => 'large', 'color' => 'red');當你使用這個特性時,你必須爲類的構造函數加上參數:
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');你也能夠傳遞存於配置文件中的參數.你只需簡單的創建一個與 類文件名相同的config文件,並保存在 application/config/ 文件夾中.注意當你經過上文所述的方式動態傳遞參數時,config文件中的選項將不起做用.
要你自定義的類庫中訪問CodeIgniter的原始資源,你必須使用 get_instance() 函數.這個函數返回一個CodeIgniter super object.
通常來講在你的控制器函數中你能夠經過 $this 調用任何可用的CodeIgniter函數:
$this->load->helper('url');$this, 只直接做用在你本身的控制器,模型和視圖中.當你在自定義類中想使用CodeIgniter原始類時,你能夠這樣作:
首先,定義CodeIgniter對象賦給一個變量:
$CI =& get_instance();一旦定義某個對象爲一個變量,你就可使用那個變量名 取代 $this:
$CI =& get_instance(); 注意: 你將注意到get_instance()這個函數經過被引用的方式被傳遞:
$CI =& get_instance();
這十分重要. 經過引用的方式賦給變量將使用原始的 CodeIgniter 對象,而不是建立一個副本。
簡單的將你本身的類命名爲與原始類同樣就能使CodeIgniter使用這個新類.要使用這個特性,文件名與類聲明必須與原始類徹底一致。例如,要替換原始的 Email 類庫。你必須建立一個文件application/libraries/Email.php, 並按以下方式聲明類:
class CI_Email {注意大多數原始類以CI_爲前綴.
你能夠只用標準載入函數來載入你本身的類:
$this->load->library('email');注意: 這個時候Database沒法替換爲你自定義的類.
若是你須要在現有類庫中加入一兩個新的功能,那就徹底沒必要要替換整個類庫文件.你只需簡單地擴展(繼承)現有的類,擴展一個類就像在類中增長一些例外:
例如,要擴展原始類 Email 類你要創建文件 application/libraries/MY_Email.php, 並按以下方式在文件中聲明:
class MY_Email extends CI_Email {注意:若是你須要在類中使用構造函數,你必須在構造函數中顯式繼承母類構造函數:
class MY_Email extends CI_Email {要載入擴展子類,你應該使用標準字符名. 請不要使用前綴. 例如,要載入上文說過的email擴展子類,你應該這樣寫:
$this->load->library('email');擴展子類一旦被載入,就能像通常的類同樣使用它們. Email類中的全部函數就能被調用:
$this->email->some_function();要設定你本身的子類前綴,請打開 application/config/config.php 文件並找到這一項:
$config['subclass_prefix'] = 'MY_';注意全部原始CodeIgniter類庫以 CI_ 做爲前綴,因此請勿以CI_做爲你本身的前綴.