Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/253.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php:重复导航2次_Php_Class - Fatal编程技术网

Php:重复导航2次

Php:重复导航2次,php,class,Php,Class,我对php很陌生! 我想为我的小cms创建一个导航类。 它可以正常工作,除了一件事:所有页面和子页面都显示了两次,而不是应该显示的一次。。 你能帮帮我吗 我是这样称呼这个班的: <div id="nav"> <ul class="navigation"> <?php $navigation_object = new Navigation(); $navigation_object->navigation();

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

我是这样称呼这个班的:

<div id="nav">
  <ul class="navigation">

     <?php

      $navigation_object = new Navigation();
      $navigation_object->navigation();
     ?>
   </ul>
</div>
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

这是一节课:

<div id="nav">
  <ul class="navigation">

     <?php

      $navigation_object = new Navigation();
      $navigation_object->navigation();
     ?>
   </ul>
</div>
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
类导航{
var$nav_集;
var$nav;
var$选定资产净值;
var$page_集;
var$page;
var$所选页面;
public$output=NULL;
公共功能导航(){
//_____________________________导航_____________________________
//3.对表NAV执行数据库查询
$get_all_nav_object2=新的get_all_nav();
$this->nav_set=$get_all_nav_object2->get_all_nav_函数();
//4.使用表NAV的返回数据(在变量$NAV_集合中)
而($this->nav=mysql\u fetch\u数组($this->nav\u set)){
$output=“”;
//_uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu页面_______________________________________
//3b.对表页执行数据库查询(子导航)
$get_pages_object1=为_nav()新建get_pages_;
$this->page_set=$get_pages\u object1->get_pages\u for_nav_函数($this->nav[“id]”);
$output.=“
    ”; //4b.使用表页的返回数据(在变量$page_集合中) 而($this->page=mysql\u fetch\u数组($this->page\u set)){ $output.=“”; } $output.=“
”;//关闭ul以进行sub_导航 echo$输出; }//上一个while的结尾:while($nav=mysql\u fetch\u数组($nav\u set)) }//结束函数 }//结束类
由于类中的第一个方法与类具有相同的名称,因此在实例化类时会自动运行该方法。这称为a,意味着您不需要调用
$navigation\u object->navigation()

为了向后兼容,如果PHP5找不到_构造() 函数,而该类没有从 父类,它将搜索旧式构造函数, 以类的名称命名


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

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

删除以下行:

$navigation_object->navigation();

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

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

结果是navigation()执行两次:一次是在创建时执行,另一次是在distinct调用时执行。重命名类或方法以解决它。


有关构造函数和析构函数的更多信息,请参见此处:

非常感谢!!我不仅解决了这个问题,而且终于了解了它是如何工作的方法构造!!谢谢你,亚当!