我非常希望将我们的许多服务器更新为PHP 5.3。这将为Zend Framework 2以及明显的性能更新做好准备。不幸的是,我在这些服务器上有大量遗留代码,这些代码及时修复,但在迁移之前无法修复。我正在考虑更新但禁用除了几个开发站点之外的所有开发站点上的已弃用功能错误,我可以通过更新旧代码开始工作。
error_reporting(E_ALL ^ E_DEPRECATED);
为什么这会是一个坏主意有什么根本原因吗?
答案 0 :(得分:4)
好吧,你可能会忘记你设置了标志并想知道为什么你的应用程序在下一次PHP更新中会中断。如果没有正确的错误报告,调试应用程序会非常令人沮丧。这是我能想到的一个原因。
但是,如果你这样做,请将其记录在某个地方。在您记得设置标志之前,它可以为您节省几个小时。
答案 1 :(得分:3)
如果您还没有,请阅读migration guide,特别关注Backward Incompatible Changes和Removed Extensions。
您有比弃用更大的问题。忽略E_DEPRECATED
是不够的。由于不兼容的更改,还会出现其他类型的错误,或者甚至更糟糕的是,意外的行为。
这是一个简单的例子:
<?php
function goto($line){
echo $line;
}
goto(7);
?>
这段代码可以在PHP 5.2.x中正常工作并输出7
但在PHP 5.3.x中会给你一个解析错误。
您需要做的是获取该指南中的每个项目并检查您的代码并在需要时进行更新。为了加快速度,你可以在第一阶段忽略已弃用的功能 ,并且只禁用E_DEPRECATED
的错误报告,但是你不能认为在移植到时只会收到一些无害的警告另一个主要的PHP分支。
另外,请不要忘记您的黑客行为并尽快修复已弃用的问题。
的问候,
阿林
注意:我试图从实际角度回答这个问题,所以请不要告诉我忽略警告是不好的。我知道,但我也知道时间不是无限的资源。
答案 2 :(得分:1)
我认为你有某种测试服务器?如果没有,你真的应该设置一个并在PHP 5.3中测试你的代码。如果您的代码经过了单元测试,那么测试将需要几秒钟,修复它也会非常快,因为单元测试会告诉您确切的位置。如果没有,那么考虑在下一个版本之前将单元测试作为优先事项,同时完成所有操作,首先禁用E_DEPRECATED
警告并修复出现的任何内容,然后重新启用它有时间。您还可以运行全局查找和替换,以便更容易修复错误。