为什么在PHP中禁用E_WARNING被认为是不好的做法?

据我了解,至少对于PHP v7.3,这是 Production 系统的“最佳实践” PHP error_reporting值:

ini_set('error_reporting',E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED);

我注意到此报告E_WARNING

我对忽略警告的不利方面感兴趣,例如:

ini_set('error_reporting',E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED & ~E_WARNING);

这会在底层发出警告,从长远来看,这将对项目中的代码质量不利。到目前为止,很明显,忽略警告是一个坏习惯。

但是,让我们在混合中添加另一个因素。通常会配置一个自定义PHP错误处理程序,以在出现 reported 错误时停止执行。例如,Yii1 handleError函数终止应用程序。我想象许多PHP框架都采用相同的方法。实际上,这会引起一些混乱,因为php docs说:

  

E_WARNING运行时警告(非致命错误)。 不暂停

但是(至少在Yii1中),如果error_reporting值中包含E_WARNING(由于yii自定义错误处理程序),脚本的执行将被暂停。

在我当前的项目中,E_WARNING是在测试系统上报告的,但目前不在生产中,并且可能需要80个小时来修复所有警告,以便我们可以启用它并遵循最佳实践。我认为这值得付出努力,我将向团队提出建议,但我需要对项目有一些好处,否则我们的投资回报率将被认为过低。到目前为止,我只有2种好处:

  1. 长期来看,这对于代码质量而言是最好的。
  2. 如果发生警告,则不停止可能是安全问题。我可以想到的一个示例是,警告可能与无效的正则表达式有关(过去已知无效的正则表达式容易受到攻击)。有时,用户输入会在正则表达式中使用,这肯定会打开攻击向量。

您能想到其他原因吗?


总结我的问题(TL; DR)

如果发生E_WARNING,不暂停应用程序有什么危险?

lglzn 回答:为什么在PHP中禁用E_WARNING被认为是不好的做法?

您应将所有警告视为错误。基本上,警告是不会停止脚本执行的错误。在这种情况下,它们被认为比错误更危险。如果前面的操作失败,通常您不希望应用程序继续执行。对于编码错误的程序,这可能是灾难性的。

警告会告诉您代码存在严重问题,而不是您的代码未遵循最佳实践。

在将来的PHP版本中,有计划提高所有错误的严重性。参见https://wiki.php.net/rfc/engine_warnings

如果您有能力忽略所有警告,并且您的代码仍然可以正确执行,则表明存在严重的代码异味。所有警告均应记录并尽快修复。它们不应被视为潜在的错误,而应被视为现有的错误。

,

理想情况下,您的团队应该在软件投入生产(测试和质量检查)之前解决所有警告原因,毕竟所有隐患仍然是一个问题。有关错误here的信息非常不错。

本文链接:https://www.f2er.com/3007524.html

大家都在问