代码之家  ›  专栏  ›  技术社区  ›  Jaime Montoya

访问器魔术方法在PHP 8中不起作用[重复]

  •  0
  • Jaime Montoya  · 技术社区  · 1 年前

    我最近将Ubuntu从20.04 LTS升级到22.04 LTS。我注意到PHP已升级到以下版本:

    PHP 8.1.2-1ubuntu2.13 (cli) (built: Jun 28 2023 14:01:49) (NTS)
    Copyright (c) The PHP Group
    Zend Engine v4.1.2, Copyright (c) Zend Technologies
        with Zend OPcache v8.1.2-1ubuntu2.13, Copyright (c), by Zend Technologies
    

    我的PHP应用程序在此部分停止工作:

    public function __set($name, $value)
    {
      $this->$name = $value;
    }
    
    public function DisplayMenu($buttons)
    {
      echo "\t\t\t<nav>\n\t\t\t\t<ul>\n";
      while (list($name, $url) = each($buttons)) {
        $this->DisplayButton($name, $url);
      }
      echo "\t\t\t\t</ul>\n\t\t\t</nav>\n";
    }
    

    从PHP7.x升级到8.x后,访问器魔术方法停止工作。在PHP8.x中使用等效方法的新方法是什么?非常感谢。

    1 回复  |  直到 1 年前
        1
  •  4
  •   Tim Roberts    1 年前

    它不是访问者。问题是 each 函数在PHP 8中被删除。您需要切换到 foreach

    <?php
    class what 
    {
        public function __set($name, $value)
        {
            $this->$name = $value;
        }
    
        public function DisplayButton($name,$value)
        {
            $this->$name = $value;
        }
    
        public function DisplayMenu($buttons)
        {
          echo "\t\t\t<nav>\n\t\t\t\t<ul>\n";
          foreach( $buttons as $name => $url ) {
            $this->DisplayButton($name, $url);
          }
          echo "\t\t\t\t</ul>\n\t\t\t</nav>\n";
        }
    }
    
    $x = new what();
    $x->DisplayMenu(['a'=>'b','c'=>'d']);
    print_r($x);
    ?>