# CodeIgniter 用户指南 版本 2.2.0

编辑文档、查看近期更改请 登录 或 注册 找回密码

搜索用户指南

查看原文

# 辅助函数

辅助函数，顾名思义，是帮助我们完成特定任务的函数。每个辅助函数文件仅仅是一些函数的集合。例如，URL Helpers 可以帮助我们创建链接，Form Helpers 可以帮助我们创建表单，Text Helpers 提供一系列的格式化输出方式，Cookie Helpers 能帮助我们设置和读取COOKIE， File Helpers 能帮助我们处理文件，等等。

跟其他部分不同的是，辅助函数不是用类的方式来实现的。它们仅仅是一些简单的过程处理函数。 每个辅助函数处理一个特定的任务，并且不必依靠其他函数。

CodeIgniter 默认是没有载入辅助函数文件的，所以如果你想用辅助函数，就必须先载入它。 一旦被载入，辅助函数将全局可用(globally available)，你可以在 controller 和 views 中使用它们。

辅助函数文件一般保存在 system/helpers 或 application/helpers 文件夹中。CodeIgniter 将会先在 application/helpers 寻找对应的辅助函数文件， 如果目录不存在或者目录下没有对应的辅助函数文件，CI 才会载入 system/helpers 下的辅助函数文件。

## 载入辅助函数

载入辅助函数是非常简单的:

`$this->load->helper('name');`

name 是辅助函数文件的名字(不带.php后缀 和"helper" 部分)。

例如，要载入文件名为url_helper.php的URL Helper，你将会用到下面的语句：

`$this->load->helper('url');`

辅助函数可以在你的控制器(controller)的任何地方被载入，甚至可以在视图(View)文件中被载入(我们并不建议你这么做)。 请在使用辅助函数之前载入他们。你可以在你的控制器构造函数中载入它们，以便辅助函数能自动在其他函数之前被载入。你也可以在要用到辅助函数的地方当场载入。

注意: 辅助函数载入函数并不返回值，所以不要尝试将它付给一个变量，直接像这样用就可以了。

## 载入多个辅助函数

如果你想一次载入多个辅助函数，你可以这样做:

`$this->load->helper( `array(`'helper1', 'helper2', 'helper3'`)` );`

## 自动载入辅助函数

如果你想要的话，CodeIgniter可以自动为你载入辅助函数。你可以通过打开 application/config/autoload.php ，并往自动载入数组(autoload array)中增加辅助函数来实现。

## 使用辅助函数

一旦你载入了想要用到辅助函数文件，你就可以用标准的函数调用方法来使用里面的函数。

例如，要使用anchor() 函数来建立一个链接，在视图(View)文件里面你可以这样做:

`<?php echo anchor('blog/comments', 'Click Here');?>`

"Click Here" 是链接的名字，"blog/comments" 是链接的URI。

注意：辅助函数中的函数名最好做好命名规范，如果同时加载多个辅助函数文件，且其中有名称相同的函数，会导致 CI 出现空白页问题（也就是 PHP 语法错误）。

## “扩展”辅助函数

你如果想 "扩展"一个原有的 Helpers，可以在你的 application/helpers/ 目录下创建一个新的helper，新的helper的名字是在被“扩展”的Helper的名字开头多加一个 `MY_` (这是可以配置的. 见下.).

如果你想做的只是在原有的helper中添加一些新的功能，比如，添加一两个新的方法，或者是修改一个方法；就不值得重写自己的helper。在这种情况下，最好是“扩展”已有的helper。“扩展”一词用在这里不是很恰当，因为Helper的方法是过程式的(procedural) 和离散(discrete)的，在传统的语言环境中无法被“扩展”，不过在CodeIgniter中，你可以添加或修改helper的方法。

例如，扩展一个本地已有的 `Array Helper` 你应该建立一个文件： application/helpers/`MY_array_helper.php`, 并添加或重写（override）其中的一些方法:

`// 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);
}
`

### 设定你自己的前缀（Prefix）

用于"扩展" helper 而加上前缀的文件同样也是对库和核心类的扩展.为了设置你自定义的前缀,请打开 application/config/config.php 文件,然后找到如下的条目:

`$config['subclass_prefix'] = 'MY_';`

请注意：由于所有CodeIgniter自带的库都被冠以 `CI_` 这样的前缀命名,所以请不要使用`CI_`来自定义前缀.

## 现在可以做什么?

在目录里面有所有辅助函数的列表，你可以打开每个文件看看他们都能做些什么。

不过目前还没有想到更好的方法让我们如何记住这些辅助函数！要不编辑个快速查询手册？？如果你有更好的方法请告诉我！

翻译贡献者: architectcom, borisauschina, chenshenghan, csfhc, Hex, levin, lishen2, longbill, ripen, sheshi37c, shishirui, tangjianft, thankwsx, Xwoder
最后修改: 2014-06-05 10:17:46