PHP 5.4 调用时间通过引用 - 容易修复吗?

php
2022-08-30 06:19:27

有没有办法轻松解决此问题,或者我真的需要重写所有遗留代码吗?

PHP致命错误:调用时间通过引用已被删除...在30号线

这种情况无处不在,因为变量作为整个代码中的引用传递到函数中。


答案 1

您应该在函数定义中通过引用来表示调用,而不是实际的调用。由于PHP开始在5.3版本中显示弃用错误,我会说重写代码是个好主意。

从文档中

函数调用上没有引用符号 - 仅在函数定义上。仅函数定义就足以通过引用正确传递参数。从 PHP 5.3.0 开始,您将收到一条警告,指出当您在 中使用时,“调用时间通过引用”已被弃用。&foo(&$a);

例如,不使用:

// Wrong way!
myFunc(&$arg);               # Deprecated pass-by-reference argument
function myFunc($arg) { }

用:

// Right way!
myFunc($var);                # pass-by-value argument
function myFunc(&$arg) { }

答案 2

对于像我一样阅读本文的人来说,因为他们需要将一个巨大的遗留项目更新到5.6:正如这里的答案所指出的那样,没有快速解决方案:您确实需要手动找到问题的每个发生,并修复它。

我发现在项目中查找所有有问题的行的最方便的方法(除了使用完整的静态代码分析器,这是非常准确的,但我不知道任何可以立即将您带到编辑器中正确位置的方法)是使用Visual Studio Code,它内置了一个不错的PHP linter, 及其搜索功能,允许通过正则表达式进行搜索。(当然,您可以使用任何执行PHP linting和Regex搜索的IDE /代码编辑器。

使用此正则表达式:

^(?!.*function).*(\&\$)

可以在项目范围内搜索仅在不是函数定义的行中出现。&$

这仍然会出现很多误报,但它确实使工作更容易。

VSCode 的搜索结果浏览器使浏览和查找违规行变得非常容易:您只需单击每个结果,并注意那些 linter 下划线为红色的结果。那些你需要修复的。


推荐