**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/
相關文章
- 使用 arch-ppa 建立你自己的 Arch Linux 軟體庫Linux
- MFC之動態呼叫自己寫的類庫中的類的成員方法
- Drone CI For Github —— 打造自己的CI/CD工作流(一)Github
- 4個方法建立自己的寫作素材庫
- 開個腦洞,帶你寫一個自己的極狐GitLab CI RunnerGitlab
- 程式碼管理 | 建立並管理自己的公有Cocopods庫
- 輕量化自建 Drone CI For Gitea —— 打造自己的CI/CD工作流(三)Git
- Azure DevOps+Docker+Asp.NET Core 實現CI/CD(一 .簡介與建立自己的代理池)devDockerASP.NET
- 在Spring Boot中建立自己的啟動器Spring Boot
- 如何快速在odoo中建立自己的選單Odoo
- Java 中建立子類物件會建立父類物件麼?Java物件
- 建立CI/CD流水線中的IaC前,需要考慮哪些事項?
- 不如自己寫一個 schema 類庫吧
- Java庫中的LocalDate類JavaLDA
- [小團隊自動化] (一) Drone CI For Github —— 打造自己的CI/CD工作流Github
- 基於 Gitea+Drone CI+Vault 打造屬於自己的CI/CD工作流Git
- 自己動手實現Java中的StringBuffer類Java
- python中類的建立和例項化Python
- Python中類的建立和使用方法Python
- 自媒體人如何高效採集素材?建立自己的素材庫?
- 建立了自己的部落格
- 10分鐘學會Visual Studio將自己建立的類庫打包到NuGet進行引用(net,net core,C#)C#
- 如何構建自己的雲資料庫?建立雲資料庫是否要收費?資料庫
- Travis CI 持續整合服務構建 Composer 類庫簡明教程
- 使用CocoaPods建立自己的私有庫-iOS元件化第一步iOS元件化
- 建立屬於自己的NPM包NPM
- 建立適合自己的骨架包
- hexo+github建立自己的blogHexoGithub
- [小團隊自動化] (三) 輕量化自建 Drone CI For Gitea —— 打造自己的CI/CD工作流Git
- CI(CodeIgniter)框架下使用非自帶類庫實現郵件傳送框架
- Oomox:定製和建立你自己的 GTK2、GTK3 主題OomoxGTK2GTK3
- C/C++利用Boost::Asio網路庫建立自己的Socket伺服器C++伺服器
- 我把我自己的日期類庫分享出來給大家用
- 建立Arkts的類,方法
- 類與物件的建立物件
- 教你用Pytorch建立你的第一個文字分類模型PyTorch文字分類模型
- Python進階丨如何建立你的第一個Python元類?Python
- github中建立倉庫步驟Github
- SpringBoot(04)——建立自己的自動配置Spring Boot