Php 在CI中创建自己的类

Php 在CI中创建自己的类,php,codeigniter,class,Php,Codeigniter,Class,我试图在CodeIgniter中创建自己的类,因此我在文件夹中创建了一个文件 图书馆 这个类叫做 菜单 它包含一个为我的网站创建导航栏的类。这门课就像 class Menu { public function draw($menu) { $CI =& get_instance(); $output = ''; foreach ($menu as $key => $value) { $output .

我试图在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;
    }
}
类菜单{
公共功能绘图($菜单){
$CI=&get_instance();
$output='';
foreach($key=>$value的菜单){
$output.=“
  • ”; if(是_数组($value)){ if(strpos($key,“|”)!==false){ $param=分解(“|”,$key); $output.=anchor($param[1],$param[0]); }否则{ $output.=anchor(“#”,$key); } $output.=PHP\u EOL.“
      ”.PHP\u EOL; $output.=draw($value); $output.=“
    ”.PHP\u EOL.
  • ”.PHP\u EOL; }否则{ $output.=anchor($key,$value,$CI->uri->slash_段(1,'leading')==$key?'class=“active”:“”); $output.=“”.PHP\u EOL; } } 返回$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)

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

    变化

    $output.=draw($value)

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

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


    您可能需要阅读php.net网站上的解释:

    嘿,谢谢!这就成功了:)在8分钟内,当可能的欢呼声响起时,我会把它标记为正确答案!别担心。祝你好运如果您不太熟悉PHP中的OOP,我强烈建议您阅读ref文档。很高兴您正在为此创建一个库。这让我觉得;)请记住,加载CI库后,可以使用
    $this->libraryName->method()访问其方法。在这种情况下:
    $this->menu->draw()谢谢!我从CI网站的文档中找到了答案。我现在想的唯一一件事是在哪里存储硬编码的菜单数组(暂时不要使用数据库)看看语言库,或是CI用户指南中的配置库。你的选择;)