如何找到 PHP 项目中所有出现的 "call-time pass-by-reference" 和 remove/repair 它们?
How to find all occurences of "call-time pass-by-reference" in PHP project and remove/repair them?
调用时间传递引用在 PHP 5.3.0 (2009) 中已弃用,并从 PHP 5.4.0 (2012) 中删除。但是在将旧的 PHP 项目迁移到新服务器时,我仍然遇到这个问题。如何在 PHP 项目和 remove/repair 项目中找到所有出现的 "call-time pass-by-reference"?
没有自动执行此操作的方法(至少我还没有找到)。它必须手动完成。通过以下正则表达式(使用您的 IDE 启动正则表达式搜索),可以在项目文件中非常精确地找到调用时间传递引用:
(?<!function)[:> ][a-zA-Z0-9_]+(?<!foreach|array)\s?\([^()]*&$
发现必须手动修复的问题。你必须:
- 删除 function/method 调用中的符号。例如。像
$myResult = myFunction(&$myVar)
你会重写成 $myResult = myFunction($myVar)
.
- 检查
myFunction()
是否定义了第一个参数,如 function myFunction(&$myArg1)
。如果不是(这意味着定义中缺少符号),那么您必须修复它并添加符号
- 如果
myFunction()
的定义中缺少 & 符号,那么您必须检查项目中 myFunction()
的所有调用是否都是用 "call-time pass-by-reference" 完成的。如果是,那么你就完成了。如果不是(这意味着有 myFunction()
的调用没有 "call-time pass-by-reference")那么你必须考虑如果你使用传递引用它是否改变了一些东西,如果是那么你应该写一个传递值的 myFunction()
并将其用于这些事件
调用时间传递引用在 PHP 5.3.0 (2009) 中已弃用,并从 PHP 5.4.0 (2012) 中删除。但是在将旧的 PHP 项目迁移到新服务器时,我仍然遇到这个问题。如何在 PHP 项目和 remove/repair 项目中找到所有出现的 "call-time pass-by-reference"?
没有自动执行此操作的方法(至少我还没有找到)。它必须手动完成。通过以下正则表达式(使用您的 IDE 启动正则表达式搜索),可以在项目文件中非常精确地找到调用时间传递引用:
(?<!function)[:> ][a-zA-Z0-9_]+(?<!foreach|array)\s?\([^()]*&$
发现必须手动修复的问题。你必须:
- 删除 function/method 调用中的符号。例如。像
$myResult = myFunction(&$myVar)
你会重写成$myResult = myFunction($myVar)
. - 检查
myFunction()
是否定义了第一个参数,如function myFunction(&$myArg1)
。如果不是(这意味着定义中缺少符号),那么您必须修复它并添加符号 - 如果
myFunction()
的定义中缺少 & 符号,那么您必须检查项目中myFunction()
的所有调用是否都是用 "call-time pass-by-reference" 完成的。如果是,那么你就完成了。如果不是(这意味着有myFunction()
的调用没有 "call-time pass-by-reference")那么你必须考虑如果你使用传递引用它是否改变了一些东西,如果是那么你应该写一个传递值的myFunction()
并将其用于这些事件