PHP 5.4 调用时间通过引用 - 容易修复吗?
2022-08-30 06:19:27
有没有办法轻松解决此问题,或者我真的需要重写所有遗留代码吗?
PHP致命错误:调用时间通过引用已被删除...在30号线
这种情况无处不在,因为变量作为整个代码中的引用传递到函数中。
有没有办法轻松解决此问题,或者我真的需要重写所有遗留代码吗?
PHP致命错误:调用时间通过引用已被删除...在30号线
这种情况无处不在,因为变量作为整个代码中的引用传递到函数中。
您应该在函数定义中通过引用来表示调用,而不是实际的调用。由于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) { }
对于像我一样阅读本文的人来说,因为他们需要将一个巨大的遗留项目更新到5.6:正如这里的答案所指出的那样,没有快速解决方案:您确实需要手动找到问题的每个发生,并修复它。
我发现在项目中查找所有有问题的行的最方便的方法(除了使用完整的静态代码分析器,这是非常准确的,但我不知道任何可以立即将您带到编辑器中正确位置的方法)是使用Visual Studio Code,它内置了一个不错的PHP linter, 及其搜索功能,允许通过正则表达式进行搜索。(当然,您可以使用任何执行PHP linting和Regex搜索的IDE /代码编辑器。
使用此正则表达式:
^(?!.*function).*(\&\$)
可以在项目范围内搜索仅在不是函数定义的行中出现。&$
这仍然会出现很多误报,但它确实使工作更容易。
VSCode 的搜索结果浏览器使浏览和查找违规行变得非常容易:您只需单击每个结果,并注意那些 linter 下划线为红色的结果。那些你需要修复的。