Php 在CI中创建自己的类
我试图在CodeIgniter中创建自己的类,因此我在文件夹中创建了一个文件 图书馆 这个类叫做 菜单 它包含一个为我的网站创建导航栏的类。这门课就像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 .
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用户指南中的配置库。你的选择;)