使用奇怪的 OOP 引用的 php5 到 php7 迁移代码问题? [复制]
Posted
技术标签:
【中文标题】使用奇怪的 OOP 引用的 php5 到 php7 迁移代码问题? [复制]【英文标题】:php5 to php7 migration code problem using odd OOP references? [duplicate] 【发布时间】:2021-01-03 20:30:52 【问题描述】:我正在尝试修复一个需要更新才能在 php7.2 上运行的朋友的网站。它在 php5 上运行良好,但在执行如下命令时似乎没有错误地崩溃:
$$mod_name = &$$parent_array[$mod_parent]->addItem(new XNode($mod_name,$mod_url,"Images/doc.gif",false));
像 &$$ 这样的奇怪变量引用我以前从未见过。这个符号在 php7 中是否被贬低了?
代码使用了一个名为 xPandMenu 的库。这是图书馆:
https://www.phpclasses.org/package/2018-PHP-Generate-a-dynamic-hierarchic-menu.html
我联系了这段代码的作者,他对更新它不感兴趣,并且不再使用 PHP。我不熟悉 OOP 和使用的奇怪变量/类引用。
有谁知道什么会导致这段代码在 php5 中正常工作,但在 php 7.2 中崩溃而没有错误?
【问题讨论】:
crash without error
是什么意思,是空白页还是什么?
当我看到像$$mod_name = &$$parent_array...
这样的代码时,我立即离开了这个项目。真正糟糕的代码气味通常意味着调试将是一场噩梦。至于空白页,请确保您打开了错误/警告 - ***.com/a/21429652/296555
所以它只是停止了......错误日志中没有任何内容,但我在代码之前和之后放置了断点,所以我知道这就是它崩溃的地方。我同意.. &$$variable 太疯狂了.... 有什么解决办法吗?也许这不是库的错,而是对象被引用的方式?
我认为必须有另一种方法来使用稍微不同的符号来编写分配/对象引用?
我认为可以在“变量处理”下找到问题的线索:php.net/manual/en/migration70.incompatible.php
【参考方案1】:
这是解决这个问题的方法。
PHP7 解析双变量引用的方式现在不同了,根据这个页面:
https://www.php.net/manual/en/migration70.incompatible.php
所以正确地重写这个:
&$$parent_array[$mod_parent]->addItem(new XNode($mod_name,$mod_url,"Images/doc.gif",false));
是:
&$$parent_array[$mod_parent]->addItem(new XNode($mod_name,$mod_url,"Images/doc.gif",false));
在 PHP5 中也有类似这样的引用:
$$var['key'];
在 PHP7 下表现不同,必须明确指出:
$$var['key'];
【讨论】:
以上是关于使用奇怪的 OOP 引用的 php5 到 php7 迁移代码问题? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
Laravel Homestead Box 0.4.2使用php5.6而不是php7