忽略非致命错误是否是一种好的做法


Is it good practice to ignore non-fatal errors?

当我学习PHP时,我被教导要使我的代码没有错误,但仍然在生产代码中隐藏错误以确保干净的用户体验。

我最近参与了一些项目,其中原始作者采取了留下错误和警告的方法,甚至利用它们来实现某些目标,而不是在没有它的情况下编写代码。

例如,代码如下所示:

$numm = 0;
while($numm < 10){
    $var = "something,".$var;
    $numm++;
}

此代码将在第一次通过循环引发非致命Notice,因为$var对于第一次串联不存在。

还有很多其他的例子,他们要么忽略错误,要么甚至利用它们(结束循环等),但随后对用户隐藏它们。

对我来说,这似乎是不好的做法,但我可能只是强迫症。

通知是一个等待发生的错误。 我经常使用error_reporting(E_ALL);集进行开发。我想在错误成为问题之前找到它们,而不是简单地忽略问题、潜在问题与否。

在 while 循环中设置 isset($var) 的要求。

我一直觉得烦人的一件事是做这样的事情:

$var = isset($var) ? "something,".$var : "something,";

当您考虑可能的使用次数时,这一个衬里可以防止错误,但不是理想的方法。 假设一个返回的关联数组并不总是包含您期望设置的所有键/值。

我对几乎所有应用程序采取的一种方法是创建和使用以下函数:

function rtnVal(&$val, $default = null){
    return isset($val) ? $val : $default;
}

所以在这种情况下,我所要做的就是:

$var = "something,".rtnVal($var);

很容易不是吗? 如果您不知道,定义

function rtnVal(&$var) { ... }

而不是:

function rtnVal($var) { ... }

(注意 & 符号)表示$var是一个"占位符"(通过引用传递),而不是实际传递。 因此,当您使用它时,不必事先设置它。

不过,这有一个限制,那就是使用对象,他们不喜欢以这种方式通过引用传递,所以对于那些,我还没有找到更好的解决方案。