用户
 找回密码
 入住 CI 中国社区
搜索
查看: 2963|回复: 3
收起左侧

[已解决] 按手册扩展辅助函数出现的问题

[复制链接]
发表于 2011-3-20 10:38:20 | 显示全部楼层 |阅读模式
看了ci手册里面关于辅助函数的创建那一节(下面是原文):

"扩展" Helpers
你如果想 "扩展"一个原有的 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);
}



首先:我按照上面的步骤,在application中的helper建立了一个文件:MY_array_helper.php,里面的内容稍做了修改,如下:
<?php
if ( ! defined('BASEPATH')) exit('No direct script access allowed');

function any_in_array()
{
    $a="aaaaaa";
        echo $a;
}

// random_element() is included in Array Helper, so it overrides the native function
function random_element()
{
    $b="bbbb ;
    echo $b;
}

然后:我在controller中建立了一个ajia.php,内容如下:
<?php

class Ajia extends MY_Controller
{
    public function __construct()
    {
        parent::__construct();
        $this->load->helper('array');
    }

    public function index()
    {
         $this->array->any_in_array();
        $this->array->random_element();
               
    }
}

最后:测试是否扩展成功,url中输入http://localhost/ci/ajia/index    但最终提示了错误如下:
A PHP Error was encountered
Severity: Notice

Message: Undefined property: Ajia:array

Filename: controllers/ajia.php

Line Number: 13

Fatal error: Call to a member function any_in_array() on a non-object in E:\wamp\www\ci\application\controllers\ajia.php on line 13


1、里面的代码为方便测试,简单了编写,最后错误不知道是什么原因,同样的我测试了扩展library中的类库,测试成功,这两者的原理是差不多的我理解的
2、求助啊!!!!!!
 楼主| 发表于 2011-3-20 10:41:24 | 显示全部楼层
不好意思,上面的controller中的ajia.php中的class Ajia extends MY_Controller
我写错了,应该是class Ajia extends CI_Controller的!还是不行
发表于 2011-3-20 11:04:33 | 显示全部楼层
你的 helper 用法错了,肯定是没仔细看手册,太马虎。
应该这样用:
PHP复制代码
any_in_array();
复制代码

不需要写 $this->array,helper 就是普通函数,不是类方法。
 楼主| 发表于 2011-3-20 11:47:49 | 显示全部楼层
恩,吸取经验了!!谢谢管理员!!

本版积分规则