# 輔助函數
輔助函數,顧名思義,是幫助我們完成特定任務的函數。每個輔助函數文件都是某一類 函數的集合。例如,?**URL 輔助函數**?幫助我們創建鏈接,**表單輔助函數**幫助 我們創建表單元素,**本文輔助函數**?幫助我們處理文本的格式化,**Cookie 輔助函數**?幫助我們讀取或設置 Cookie ,**文件輔助函數**?幫助我們處理文件,等等等等。
不同于 CodeIgniter 中的大多數系統,輔助函數沒有使用面向對象的方式來實現的。 它們是簡單的過程式函數,每個函數處理一個特定的任務,不依賴于其他的函數。
CodeIgniter 默認不會自己加載輔助函數,所以使用輔助函數的第一步就是加載它。 一旦加載了,它就可以在你的?[控制器](http://codeigniter.org.cn/user_guide/general/controllers.html)?和?[視圖](http://codeigniter.org.cn/user_guide/general/views.html)?中全局訪問了。
一般情況下,輔助函數位于?**system/helpers**?或者?**application/helpers**?目錄 目錄下。CodeIgniter 首先會查找?**application/helpers**?目錄,如果該目錄不存在, 或者你加載的輔助函數沒有在該目錄下找到,CodeIgniter 就會去?system/helpers/?目錄查找。
## 加載輔助函數
可以使用下面的方法簡單的加載輔助函數:
~~~
$this->load->helper('name');
~~~
**name**?參數為輔助函數的文件名,去掉 .php 文件后綴以及 _helper 部分。
例如,要加載?**URL 輔助函數**?,它的文件名為?**url_helper.php**?,你可以這樣加載它:
~~~
$this->load->helper('url');
~~~
輔助函數可以在你的控制器方法的任何地方加載(甚至可以在你的視圖文件中加載,盡管這不是 個好的實踐),只要確保在使用之前加載它就可以了。你可以在你的控制器的構造函數中加載它, 這樣就可以在該控制器的任何方法中使用它,你也可以在某個需要它的函數中單獨加載它。
注解
上面的加載輔助函數的方法沒有返回值,所以不要將它賦值給變量,直接調用就好了。
## 加載多個輔助函數
如果你需要加載多個輔助函數,你可以使用一個數組,像下面這樣:
~~~
$this->load->helper(
array('helper1', 'helper2', 'helper3')
);
~~~
## 自動加載輔助函數
如果你需要在你的整個應用程序中使用某個輔助函數,你可以將其設置為在 CodeIgniter 初始化時 自動加載它。打開**application/config/autoload.php**?文件然后將你想加載的輔助函數添加到 autoload 數組中。
## 使用輔助函數
一旦你想要使用的輔助函數被加載,你就可以像使用標準的 PHP 函數一樣使用它們。
譬如,要在你的視圖文件中使用?anchor()?函數創建一個鏈接,你可以這樣做:
~~~
<?php echo anchor('blog/comments', 'Click Here');?>
~~~
其中,"Click Here" 是鏈接的名稱,"blog/comments" 是你希望鏈接到 controller/method 的 URI 。
## 擴展輔助函數
為了擴展輔助函數,你需要在?**application/helpers/**?目錄下新建一個文件, 文件名和已存在的輔助函數文件名一樣,但是要加上?**MY_**?前綴(這個可以配置, 見下文)。
如果你只是想往現有類中添加一些功能,譬如增加一兩個方法,或者修改輔助函數中的 某個函數,這時替換整個類感覺就有點殺雞用牛刀了。在這種情況下,最好的方法是 擴展類。
注解
“擴展”一詞在這里可能不是很恰當,因為輔助函數函數都是過程式的獨立函數, 在傳統編程中并不能被擴展。不過在 CodeIgniter 中,你可以向輔助函數中添加函數, 或者使用你自己的函數替代輔助函數中的函數。
譬如,要擴展原始的?**數組輔助函數**?,首先你要創建一個文件?**application/helpers/MY_array_helper.php**?, 然后像下面這樣添加或重寫函數:
~~~
// any_in_array() is not in the Array Helper, so it defines a new function
function any_in_array($needle, $haystack)
{
$needle = is_array($needle) ? $needle : array($needle);
foreach ($needle as $item)
{
if (in_array($item, $haystack))
{
return TRUE;
}
}
return FALSE;
}
// random_element() is included in Array Helper, so it overrides the native function
function random_element($array)
{
shuffle($array);
return array_pop($array);
}
~~~
### 設置自定義前綴
用于擴展輔助函數的文件名前綴和擴展類庫和核心類是一樣的。要自定義這個前綴,你可以打開?**application/config/config.php**?文件然后找到這項:
~~~
$config['subclass_prefix'] = 'MY_';
~~~
請注意所有原始的 CodeIgniter 類庫都以?**CI_**?開頭,所以請不要使用這個 作為你的自定義前綴。
## 然后?
在目錄里你可以找到所有的輔助函數清單,你可以瀏覽下它們看看它們都是做什么的。
- 歡迎使用 CodeIgniter
- 安裝說明
- 下載 CodeIgniter
- 安裝說明
- 從老版本升級
- 疑難解答
- CodeIgniter 概覽
- CodeIgniter 將從這里開始
- CodeIgniter 是什么?
- 支持特性
- 應用程序流程圖
- 模型-視圖-控制器
- 設計與架構目標
- 教程 - 內容提要
- 加載靜態內容
- 讀取新聞條目
- 創建新聞條目
- 結束語
- 常規主題
- CodeIgniter URL
- 控制器
- 保留名稱
- 視圖
- 模型
- 輔助函數
- 使用 CodeIgniter 類庫
- 創建類庫
- 使用 CodeIgniter 驅動器
- 創建驅動器
- 創建核心系統類
- 創建附屬類
- 鉤子 - 擴展框架核心
- 自動加載資源
- 公共函數
- 兼容性函數
- URI 路由
- 錯誤處理
- 網頁緩存
- 程序分析
- 以 CLI 方式運行
- 管理你的應用程序
- 處理多環境
- 在視圖文件中使用 PHP 替代語法
- 安全
- PHP 開發規范
- 類庫參考
- 基準測試類
- 緩存驅動器
- 日歷類
- 購物車類
- 配置類
- Email 類
- 加密類
- 加密類(新版)
- 文件上傳類
- 表單驗證類
- FTP 類
- 圖像處理類
- 輸入類
- Javascript 類
- 語言類
- 加載器類
- 遷移類
- 輸出類
- 分頁類
- 模板解析類
- 安全類
- Session 類
- HTML 表格類
- 引用通告類
- 排版類
- 單元測試類
- URI 類
- 用戶代理類
- XML-RPC 與 XML-RPC 服務器類
- Zip 編碼類
- 數據庫參考
- 數據庫快速入門: 示例代碼
- 數據庫配置
- 連接你的數據庫
- 查詢
- 生成查詢結果
- 查詢輔助函數
- 查詢構造器類
- 事務
- 數據庫元數據
- 自定義函數調用
- 數據庫緩存類
- 數據庫工廠類
- 數據庫工具類
- 數據庫驅動器參考
- 輔助函數參考
- 數組輔助函數
- 驗證碼輔助函數
- Cookie 輔助函數
- 日期輔助函數
- 目錄輔助函數
- 下載輔助函數
- 郵件輔助函數
- 文件輔助函數
- 表單輔助函數
- HTML 輔助函數
- 語言輔助函數
- Inflector 輔助函數
- 數字輔助函數
- 路徑輔助函數
- 安全輔助函數
- 表情輔助函數
- 字符串輔助函數
- 文本輔助函數
- 排版輔助函數
- URL 輔助函數
- XML 輔助函數
- 向 CodeIgniter 貢獻你的力量