注册引用新的返回值分配新的返回值在PHP 5.3已经deprecated。因此,PHP 5.3,并通过引用
$obj =& new Foo();
现在抛出一个E_DEPRECATED
错误。
当升级了大量的遗留代码的大型应用程序到5.3,这导致了很多不必要的公告。
作为此问题的潜在解决方案,我正在考虑使用正则表达式来查找并替换=& new
与= new
的所有实例。例如,下面会发现所有的PHP文件,并全歼=& new
所有实例:
find ./ -name '*.php' | xargs perl -p -i -e 's/=(\s*)&(\s*)?new\b/= new/g'
寻找答案,以下几个问题:
- 将它工作得很好?我可能遇到什么潜在问题?
- 如果不是,其中具有
= new
替换=& new
的代码的例子将在PHP 5.3改变的行为。 - 任何流行的库的例子都会导致一个问题。
- 你还有什么其他想法来处理大量的
=& new
?
我怀疑这会工作得很好,但寻找边缘情况下,我可能会遇到麻烦。是的,我知道我可以更改错误报告设置。但我不想隐藏通知,我想修复它们。
E_DEPRECATED属于通知类,而不是错误。我不确定你需要赶紧修复它(magic_quotes被声明在PHP 4.2左右)。至于正则表达式:你应该在`new`后面添加`\ b`,否则这是一种可行的重写方法。但是你只能测试它是否会损害预期的处理逻辑(尽管不太可能)。 – mario 2011-01-12 20:19:24
@mario E_DEPRECATED只是一个错误*级别*。无论哪种方式提及它都是适当的。不过\ b好点。 – mfonda 2011-01-12 20:24:28