2014-09-11 2 views
0

동적 메뉴를 만들려고하지만 치명적인 오류가 계속 발생합니다. 여기에 코드입니다 :

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(); 

로 호출.

+0

정확한 오류는 무엇입니까? – Stephen

+0

어쨌든 여러 오타가 있습니다. '$ this-> pagename()'은 존재하지 않습니다. '$ this-> page_name()'이 정의되어있다. –

+1

'__contstruct()'<= ** 자세히 살펴보십시오. ** 필요한 경우 확대하십시오. 더 나은 방법은 사전을 살펴 보는 것입니다. –

답변

1

$this은 정적 방법으로 사용할 수 없습니다. $this은 개체 용입니다. 인스턴스가없는 경우 메소드가 포함되어있는 클래스를 참조하려면 self을 사용하십시오.

오브젝트 컨텍스트에서 사용하려면 static을 메소드 서명에서 제거하십시오.

그리고 더 중요한 것은 '구문'을 잘못 입력했고 'page_name'대신 'pagename'을 입력했기 때문입니다. 작동 방식 :

<?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(); 
+0

정말 고마워요. 그건 완벽하게 작동합니다. 나는 OOP의 핸들을 얻으려고 노력하고 있는데,이 프로젝트는 그것을하기위한 나의 프로젝트이다. 도움에 정말 감사드립니다. – JDDoesDev

+0

@ user2367438 체크 표시를 클릭하여 답변을 수락했음을 표시하십시오. upvote도 항상 좋습니다 =) –

+0

upvote에 대한 담당자가 충분하지 않지만 받아 들여집니다. 다시 한 번 감사드립니다. – JDDoesDev

관련 문제