天天看點

**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 這個名字為例):

<code>&lt;?php if (!defined('BASEPATH')) exit('No direct script access allowed');  class Someclass {     public function some_function()     {     } } /* End of file Someclass.php */</code>

<code>$this-&gt;load-&gt;library('someclass');</code>

當 someclass 是檔案名時,不用加上".php"擴充名.這裡名字不分大小寫.

一旦你自定義的類加載完畢,你可以通過以下方式調用類,注意使用 小寫 的名字:

<code>$this-&gt;someclass-&gt;some_function();  // 對象的執行個體名永遠都是小寫的</code>

當初始化類庫時,你可以通過第二個參數動态的傳遞數組到類的構造函數中去:

<code>$params = array('type' =&gt; 'large', 'color' =&gt; 'red'); $this-&gt;load-&gt;library('Someclass', $params);</code>

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

<code>&lt;?php if (!defined('BASEPATH')) exit('No direct script access allowed'); class Someclass {     public function __construct($params)     {         // Do something with $params     } } ?&gt;</code>

你也可以傳遞存于配置檔案中的參數.你隻需簡單的建立一個與 類檔案名相同的config檔案,并儲存在 application/config/ 檔案夾中.注意當你通過上文所述的方式動态傳遞參數時,config檔案中的選項将不起作用.

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

一般來說在你的控制器函數中你可以通過 $this 調用任何可用的CodeIgniter函數:

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

$this, 隻直接作用在你自己的控制器,模型和視圖中.當你在自定義類中想使用CodeIgniter原始類時,你可以這樣做:

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

<code>$CI =&amp; get_instance();</code>

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

<code>$CI =&amp; get_instance(); $CI-&gt;load-&gt;helper('url'); $CI-&gt;load-&gt;library('session'); $CI-&gt;config-&gt;item('base_url'); //etc.</code>

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

$CI =&amp; get_instance(); 

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

簡單的将你自己的類命名為與原始類一樣就能使CodeIgniter使用這個新類.要使用這個特性,檔案名與類聲明必須與原始類完全一緻。例如,要替換原始的 Email 類庫。你必須建立一個檔案application/libraries/Email.php, 并按如下方式聲明類:

<code>class CI_Email { }</code>

注意大多數原始類以CI_為字首.

你可以隻用标準載入函數來載入你自己的類:

<code>$this-&gt;load-&gt;library('email');</code>

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

如果你需要在現有類庫中加入一兩個新的功能,那就完全不必要替換整個類庫檔案.你隻需簡單地擴充(繼承)現有的類,擴充一個類就像在類中增加一些例外:

擴充的類必須申明由父類擴充而來.

新擴充的類所在的檔案必須以 MY_ 為字首(這個選項是可配置的,下面有說明).

例如,要擴充原始類 Email 類你要建立檔案 application/libraries/MY_Email.php, 并按如下方式在檔案中聲明:

<code>class MY_Email extends CI_Email { }</code>

注意:如果你需要在類中使用構造函數,你必須在構造函數中顯式繼承父類構造函數:

<code>class MY_Email extends CI_Email {     public function __construct()     {         parent::__construct();     } }</code>

要載入擴充子類,你應該使用标準字元名. 請不要使用字首. 例如,要載入上文說過的email擴充子類,你應該這樣寫:

擴充子類一旦被載入,就能像一般的類一樣使用它們. Email類中的所有函數就能被調用:

<code>$this-&gt;email-&gt;some_function();</code>

要設定你自己的子類字首,請打開 application/config/config.php 檔案并找到這一項:

<code>$config['subclass_prefix'] = 'MY_';</code>

注意所有原始CodeIgniter類庫以 CI_ 作為字首,是以請勿以CI_作為你自己的字首.

如何聯系我:【萬裡虎】www.bravetiger.cn

【QQ】3396726884 (咨詢問題100元起,幫助解決問題500元起)

【部落格】http://www.cnblogs.com/kenshinobiy/