当我学习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是一个"占位符"(通过引用传递),而不是实际传递。 因此,当您使用它时,不必事先设置它。
不过,这有一个限制,那就是使用对象,他们不喜欢以这种方式通过引用传递,所以对于那些,我还没有找到更好的解决方案。