提问人:Jaime Montoya 提问时间:8/18/2023 更新时间:8/18/2023 访问量:31
访问器魔术方法在 PHP 8 中不起作用 [重复]
Accessor magic method not working in PHP 8 [duplicate]
问:
我最近将 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";
}
从 PHP 7.x 升级到 8.x 后,访问器魔术方法停止工作。在 PHP 8.x 中使用等效项的新方法是什么?谢谢。
答:
4赞
Tim Roberts
8/18/2023
#1
它不是访问器。问题是该函数在 PHP 8 中被删除了。您需要切换到循环。each
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);
?>
评论
while
each()
while
each()