为了账号安全,请及时绑定邮箱和手机立即绑定

PHP 5.4调用时间传递引用 - 可以轻松修复?

PHP 5.4调用时间传递引用 - 可以轻松修复?

PHP
守着一只汪 2019-08-06 15:45:01
PHP 5.4调用时间传递引用 - 可以轻松修复?有没有办法轻松解决这个问题,还是我真的需要重写所有遗留代码?PHP致命错误:在第30行的...中删除了呼叫时间传递引用这种情况随处可见,因为变量作为整个代码中的引用传递给函数。
查看完整描述

3 回答

?
墨色风雨

TA贡献1853条经验 获得超6个赞


您应该在函数定义中通过引用表示调用,而不是实际调用。由于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) { }


查看完整回答
反对 回复 2019-08-06
?
斯蒂芬大帝

TA贡献1827条经验 获得超8个赞

对于像我这样的人来说这是因为他们需要将一个巨大的遗留项目更新为5.6:正如这里的答案所指出的那样,没有快速修复:你真的需要手动找到问题的每一个,并修复它。

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

使用这个正则表达式:

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

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

这仍然会导致许多误报,但它确实使工作变得更容易。

VSCode的搜索结果浏览器可以让您轻松查找有问题的线条:您只需点击每个结果,然后查看linter下划线为红色的那些结果。你需要解决的问题。


查看完整回答
反对 回复 2019-08-06
  • 3 回答
  • 0 关注
  • 526 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信