我正在尝试制作一个动态菜单,但我一直收到致命的错误。这是代码:
class Menu {
public $menu;
function __contstruct() {
$this -> menu = array("Home" => "index.php",
//"Eat" => array("Casual" => "casual.php", "Fine dining" => "fine_dining.php"),
"Contact" => "contact.php");
}
public static function page_name() {
return substr($_SERVER["SCRIPT_NAME"], strrpos($_SERVER["SCRIPT_NAME"], "/") + 1);
}
public static function menu_list() {
$menu_list = "";
foreach ($this->menu as $name => $url) {
echo "<li ";
if ($url == $this -> pagename()) {
$menu_list .= "class='active'";
}
$menu_list .= "><a href='";
$menu_list .= $url;
$menu_list .= "'>" . $name . "</a></li>";
return ($menu_list);
}
}
}
?>
并用调用它
$nav = new Menu();
echo $nav->menu_list();
请帮我弄清楚为什么它不起作用。
不能在静态方法中使用$this
。$this
用于对象。当您没有实例时,使用self
引用方法所包含的类。
如果要在对象上下文中使用,请从方法签名中删除static
。
更重要的是,您拼写的"construct"不正确,键入的是"pagename"而不是"page_name"。这项工作:
<?php
class Menu {
public $menu;
function __construct() {
$this -> menu = array("Home" => "index.php",
//"Eat" => array("Casual" => "casual.php", "Fine dining" => "fine_dining.php"),
"Contact" => "contact.php");
}
public function page_name() {
return substr($_SERVER["SCRIPT_NAME"], strrpos($_SERVER["SCRIPT_NAME"], "/") + 1);
}
public function menu_list() {
$menu_list = "";
foreach ($this->menu as $name => $url) {
echo "<li ";
if ($url == $this -> page_name()) {
$menu_list .= "class='active'";
}
$menu_list .= "><a href='";
$menu_list .= $url;
$menu_list .= "'>" . $name . "</a></li>";
return ($menu_list);
}
}
}
$nav = new Menu();
echo $nav->menu_list();