在CI中创建自己的类

时间:2013-08-06 22:21:34

标签: php codeigniter class

我正在尝试在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'] = array('menu');

当我打电话给班级时我会这样做

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

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

  

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

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

但我不知道如何解决这个问题我认为这是因为再次调用自己的方法..任何帮助都是受欢迎和赞赏的。 :)

1 个答案:

答案 0 :(得分:3)

更改

$output .= draw($value);

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

$this引用当前对象,因此如果您想在其自身内递归调用draw(),则需要使用它来引用它..

您可能需要阅读php.net网站上的说明:http://php.net/manual/en/language.oop5.basic.php