首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Php:重复导航2次

Php:重复导航2次
EN

Stack Overflow用户
提问于 2013-06-02 04:45:12
回答 3查看 79关注 0票数 0

我是php的新手!我想为我的小cms创建一个导航类。它工作正常,除了一件事:所有的页面和子页面都显示两次,而不是一次。你能帮帮我吗?

我是这样调用这个类的:

代码语言:javascript
复制
<div id="nav">
  <ul class="navigation">

     <?php

      $navigation_object = new Navigation();
      $navigation_object->navigation();
     ?>
   </ul>
</div>

这就是这个类:

代码语言:javascript
复制
class Navigation {

  var $nav_set;
  var $nav;
  var $selected_nav;
  var $page_set;
  var $page;
  var $selected_page;
  public $output = NULL;




 public function navigation() {

    //_____________________________ NAV _____________________________

     // 3. Performing database query for table NAV


    $get_all_nav_object2 = new Get_all_nav();
    $this->nav_set = $get_all_nav_object2->get_all_nav_function(); 


     // 4. Using returned data for table NAV (in variable $nav_set)

     while ($this->nav = mysql_fetch_array($this->nav_set)) {

              $output = "<li"; 
              if ($this->nav["id"] == $this->selected_nav['id']) {
              $output .= " class=\"selected\"";
              }
              $output .=  "><a href=\"content.php?nav_id=" . urlencode($this->nav["id"]) . 
              "\">{$this->nav["nav_name"]}</a></li>";





     // _____________________________ PAGES _______________________________________

       // 3b. Performing database query for table PAGES (sub-navigation)

       $get_pages_object1 = new Get_pages_for_nav();
       $this->page_set = $get_pages_object1->get_pages_for_nav_function($this->nav["id"]);

        $output .=  "<ul class=\"sub_navigation\">";



             // 4b. Using returned data for table PAGES (in variable $page_set)

             while ($this->page = mysql_fetch_array($this->page_set)) {

              $output .=  "<li";
              if ($this->page["id"] == $this->selected_page['id']) {
                $output .=  " class=\"selected\"";
              }
              $output .=  "><a href=\"content.php?page_id=" . urlencode($this->page["id"]) .
               "\">{$this->page["page_name"]}</a></li>";

                }  

             $output .=  "</ul>"; //closing ul for sub_navigation
             echo $output;

     }   // END of the previous while:  while ($nav = mysql_fetch_array($nav_set))
  } // end function
} // end class
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-06-02 04:49:00

你陷入了一些奇怪的php遗留行为。在PHP5之前,与类同名的类方法被认为是构造函数。这是由于向后兼容而保留的。

导航的结果是()执行了两次:一次是在创建时,另一次是在distinct调用时。重命名类或方法来求解它。

有关构造函数和析构函数的更多信息可在此处找到:http://php.net/manual/en/language.oop5.decon.php

票数 0
EN

Stack Overflow用户

发布于 2013-06-02 04:48:03

因为类中的第一个方法与类同名,所以它会在实例化类时自动运行。这被称为constructor,这意味着您不需要调用$navigation_object->navigation();

为了向后兼容,如果PHP5找不到给定类的__construct()函数,并且该类没有从父类继承函数,它将按类名搜索旧式构造函数。

票数 1
EN

Stack Overflow用户

发布于 2013-06-02 04:48:43

这是因为您的navigation()函数与您的类(navigation)的名称相同。

在旧的PHP中,这意味着navigation()函数充当构造函数,每当创建对象的新实例时都会自动调用该构造函数。

删除以下行:

代码语言:javascript
复制
$navigation_object->navigation();

或者更改navigation()方法的名称并调用该方法

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16877097

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档