codeigniter中创建自己的类库
2019獨角獸企業重金招聘Python工程師標準>>>
當我們使用術語"類庫"時,我們一般指的是位于libraries?文件夾中的類,它們在wiki的"類庫參考"這個板塊被討論.在當前這個話題中,我們將討論如何在?application/libraries?文件夾中建立你自己的類庫,并使它們與全框架的資源維持分離.
作為一個額外的功能,當你需要在原始類中簡單地添加一些功能時,CodeIgniter能使你的類庫extend?自原始類.你甚至可以通過在application/libraries文件夾下安放同名類庫文件的方法來完全替換原始類.
總之:
- 你可以創建全新的類庫.
- 你可以擴展原始類庫.
- 你可以替換原始類庫.
以下頁面將深入介紹這三個概念.
注意:?除了數據庫類無法被擴展或替換,剩余其他類均可。
建立你的類庫文件
你的類庫文件必須保存在?application/libraries?文件夾,CodeIgniter將在這個文件夾中尋找并初始化它們.
命名約定
- 文件名首字母大寫. 例如:??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?函數中,你可以用以下的標準方式初始化你的類:
$this->load->library('someclass');當?someclass?是文件名時,不用加上".php"擴展名.這里名字不分大小寫.
一旦你自定義的類加載完畢,你可以通過以下方式調用類,注意使用?小寫?的名字:
$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_作為你自己的前綴.
轉載于:https://my.oschina.net/mickelfeng/blog/130800
總結
以上是生活随笔為你收集整理的codeigniter中创建自己的类库的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 陈晓旭出家申明
- 下一篇: PowerShell 2.0 实践(四)