在CI中创建自己的类


creating own classes in CI

我正试图在CodeIgniter中创建一个自己的类,因此我在文件夹中创建了一个文件

这类被称为

菜单

它还包含一个类,用于为我的网站创建导航栏。这个类就像

class Menu {
    public function draw($menu) {
        $CI =& get_instance();
        $output = '';
        foreach ($menu as $key => $value) {
            $output .= "<li>";
            if (is_array($value)) {
                if (strpos($key, '|') !== false) {
                    $param = explode('|', $key);
                    $output .= anchor($param[1], $param[0]);
                } else {
                    $output .= anchor('#', $key);
                }
                $output .= PHP_EOL."<ul>".PHP_EOL;
                $output .= draw($value);
                $output .= "</ul>".PHP_EOL."</li>".PHP_EOL;
            } else {
                $output .= anchor($key, $value, $CI->uri->slash_segment(1, 'leading') == $key ? 'class="active"' : '');
                $output .= "</li>".PHP_EOL;
            }
        }
        return $output;
    }
}

我已经将这个类作为自动加载放在库下的配置文件中

$autoload['libraries']=数组('menu');

当我调用类来使用它时,我会执行

    <?php 
    $m = new Menu();
    echo $m->draw($menu);
    ?>

但不幸的是,我得到了这个错误

致命错误:在第22行/Users/username/Sites/infinity2.0/application/libraries/Menu.php中调用未定义的函数draw()

第22行是$output。=提款($value);

但我不知道如何解决这个问题,我认为这是因为再次调用了自己的方法。。欢迎并感谢任何帮助。:)

更改

$output .= draw($value);

$output .= $this->draw($value);

$this指的是当前对象,所以如果你想在其内部递归调用draw(),你需要用它来指代它。

您可能想阅读php.net网站上的解释:http://php.net/manual/en/language.oop5.basic.php