使用奇怪的 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

PHP7为什么比PHP5快?

如何从php5升级到php7

centos7更新php5.4到php5.6/php7

从PHP5到PHP7的注意事项——PHP7全面删除Mysql扩展支持

从php5.2升级到php7.1是函数的参数问题