**CI中建立你自己的類庫
http://codeigniter.org.cn/user_guide/general/creating_libraries.html
建立類庫
當我們使用術語”類庫”時,我們一般指的是位於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_作為你自己的字首.
如何聯絡我:【萬里虎】www.bravetiger.cn
【QQ】3396726884 (諮詢問題100元起,幫助解決問題500元起)
【部落格】http://www.cnblogs.com/kenshinobiy/
相關文章
- 建立自己的.net類庫 (轉)
- 建立你自己的本地倉庫(Maven倉庫管理-Nexus)Maven
- 使用 arch-ppa 建立你自己的 Arch Linux 軟體庫Linux
- MFC之動態呼叫自己寫的類庫中的類的成員方法
- Drone CI For Github —— 打造自己的CI/CD工作流(一)Github
- 使用 Python 建立你自己的 Shell(下)Python
- 使用 Python 建立你自己的 Shell (上)Python
- 如何建立你自己的Git伺服器Git伺服器
- 如何建立你自己的 Git 伺服器Git伺服器
- 如何建立一個自己的 Composer 庫
- 兩種方式建立你自己的 Docker 基本映像Docker
- 分享自己的C#開發類庫C#
- 4個方法建立自己的寫作素材庫
- 輕量化自建 Drone CI For Gitea —— 打造自己的CI/CD工作流(三)Git
- 開個腦洞,帶你寫一個自己的極狐GitLab CI RunnerGitlab
- Java中建立不可變的類Java
- Yarn更快更可靠的CI建立工具Yarn
- 在VC++中建立自定義資料庫類 (轉)C++資料庫
- 【PHP】CI框架原始碼DB.php(資料庫類)PHP框架原始碼資料庫
- Android 選單(OptionMenu)大全 建立你自己的選單Android
- 如何快速在odoo中建立自己的選單Odoo
- 建立你的第一個JavaScript庫JavaScript
- Java 中建立子類物件會建立父類物件麼?Java物件
- 在Laravel中使用自己的類庫三種方式Laravel
- CI Weekly #13 | 用更 Geek 的方式配置你的 CI 工作流
- 程式碼管理 | 建立並管理自己的公有Cocopods庫
- 使用ABS和gensync建立自己的軟體包庫(轉)
- 在Spring Boot中建立自己的啟動器Spring Boot
- [小團隊自動化] (一) Drone CI For Github —— 打造自己的CI/CD工作流Github
- 基於 Gitea+Drone CI+Vault 打造屬於自己的CI/CD工作流Git
- Azure DevOps+Docker+Asp.NET Core 實現CI/CD(一 .簡介與建立自己的代理池)devDockerASP.NET
- Java庫中的LocalDate類JavaLDA
- 11g備庫中碰到自己給自己埋的坑
- 不如自己寫一個 schema 類庫吧
- 欺騙神經網路:建立你自己的對抗樣本神經網路
- github 建立自己的主頁Github
- Github 建立自己的專案Github
- 建立了自己的部落格