codeigniter中建立本身的類庫

當咱們使用術語"類庫"時,咱們通常指的是位於libraries 文件夾中的類,它們在wiki的"類庫參考"這個板塊被討論.在當前這個話題中,咱們將討論如何在 application/libraries 文件夾中創建你本身的類庫,並使它們與全框架的資源維持分離. php

做爲一個額外的功能,當你須要在原始類中簡單地添加一些功能時,CodeIgniter能使你的類庫extend 自原始類.你甚至能夠經過在application/libraries文件夾下安放同名類庫文件的方法來徹底替換原始類. html

總之: 數據庫

  • 你能夠建立全新的類庫.
  • 你能夠擴展原始類庫.
  • 你能夠替換原始類庫.

如下頁面將深刻介紹這三個概念. 數組

注意: 除了數據庫類沒法被擴展或替換,剩餘其餘類都可。 session

創建你的類庫文件

你的類庫文件必須保存在 application/libraries 文件夾,CodeIgniter將在這個文件夾中尋找並初始化它們. app

命名約定

  • 文件名首字母大寫. 例如:  Myclass.php
  • 類聲明首字母大寫. 例如:  class Myclass
  • 類的名字和文件名應符合.

類文件

全部的類應有基礎原型(注意,這裏咱們以 Someclass 這個名字爲例): 框架

<?php if (!defined('BASEPATH')) exit('No direct script access allowed'); 

class Someclass {

    public function some_function()
    {
    }
}

/* End of file Someclass.php */

使用你本身的類

在全部的Controller 函數中,你能夠用如下的標準方式初始化你的類: ide

$this->load->library('someclass');

當 someclass 是文件名時,不用加上".php"擴展名.這裏名字不分大小寫. 函數

一旦你自定義的類加載完畢,你能夠經過如下方式調用類,注意使用 小寫 的名字: codeigniter

$this->someclass->some_function();  // 對象的實例名永遠都是小寫的

在初始化自定義類時傳遞參數

當初始化類庫時,你能夠經過第二個參數動態的傳遞數組到類的構造函數中去:

$params = array('type' => 'large', 'color' => 'red');

$this->load->library('Someclass', $params);

當你使用這個特性時,你必須爲類的構造函數加上參數:

<?php if (!defined('BASEPATH')) exit('No direct script access allowed');

class Someclass {

    public function __construct($params)
    {
        // Do something with $params
    }
}

?>

你也能夠傳遞存於配置文件中的參數.你只需簡單的創建一個與 類文件名相同的config文件,並保存在 application/config/ 文件夾中.注意當你經過上文所述的方式動態傳遞參數時,config文件中的選項將不起做用.

在你自定義的類庫中初始化CodeIgniter資源

要你自定義的類庫中訪問CodeIgniter的原始資源,你必須使用 get_instance() 函數.這個函數返回一個CodeIgniter super object.

通常來講在你的控制器函數中你能夠經過 $this 調用任何可用的CodeIgniter函數:

$this->load->helper('url');
$this->load->library('session');
$this->config->item('base_url');
//etc.

$this, 只直接做用在你本身的控制器,模型和視圖中.當你在自定義類中想使用CodeIgniter原始類時,你能夠這樣作:

首先,定義CodeIgniter對象賦給一個變量:

$CI =& get_instance();

一旦定義某個對象爲一個變量,你就可使用那個變量名 取代 $this:

$CI =& get_instance();

$CI->load->helper('url');
$CI->load->library('session');
$CI->config->item('base_url');
//etc.

注意: 你將注意到get_instance()這個函數經過被引用的方式被傳遞:

$CI =& get_instance(); 

這十分重要. 經過引用的方式賦給變量將使用原始的 CodeIgniter 對象,而不是建立一個副本。

用你本身的類替換原始類

簡單的將你本身的類命名爲與原始類同樣就能使CodeIgniter使用這個新類.要使用這個特性,文件名與類聲明必須與原始類徹底一致。例如,要替換原始的 Email 類庫。你必須建立一個文件application/libraries/Email.php, 並按以下方式聲明類:

class CI_Email {

}

注意大多數原始類以CI_爲前綴.

你能夠只用標準載入函數來載入你本身的類:

$this->load->library('email');

注意: 這個時候Database沒法替換爲你自定義的類.

擴展示有類

若是你須要在現有類庫中加入一兩個新的功能,那就徹底沒必要要替換整個類庫文件.你只需簡單地擴展(繼承)現有的類,擴展一個類就像在類中增長一些例外:

  • 擴展的類必須申明由母類擴展而來.
  • 新擴展的類所在的文件必須以 MY_ 爲前綴(這個選項是可配置的,下面有說明).

例如,要擴展原始類 Email 類你要創建文件 application/libraries/MY_Email.php, 並按以下方式在文件中聲明:

class MY_Email extends CI_Email {

}

注意:若是你須要在類中使用構造函數,你必須在構造函數中顯式繼承母類構造函數:

class MY_Email extends CI_Email {

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

載入你的子類

要載入擴展子類,你應該使用標準字符名. 請不要使用前綴. 例如,要載入上文說過的email擴展子類,你應該這樣寫:

$this->load->library('email');

擴展子類一旦被載入,就能像通常的類同樣使用它們. Email類中的全部函數就能被調用:

$this->email->some_function();

設定自定義前綴

要設定你本身的子類前綴,請打開 application/config/config.php 文件並找到這一項:

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

注意全部原始CodeIgniter類庫以 CI_ 做爲前綴,因此請勿以CI_做爲你本身的前綴.

相關文章
相關標籤/搜索