是否可以抑制/隐藏PHP通知?
我已经很长一段时间没有发布任何问题了,但是我开始怀疑我是否做了正确的事情。我似乎找不到任何逻辑上的理由来解释为什么我不应该仅仅抑制它们,但其他一些人似乎认为使用错误报告抑制它们是一件可怕的事情,但为什么呢 我能找到的最接近答案是在,但这离我正在寻找的答案还很远。隐藏PHP生成的所有通知是否存在某种不可预见的缺点?例如,由于存在错误,要将POST回调中的变量包含到表单中,我只需使用:是否可以抑制/隐藏PHP通知?,php,suppress-warnings,notice,Php,Suppress Warnings,Notice,我已经很长一段时间没有发布任何问题了,但是我开始怀疑我是否做了正确的事情。我似乎找不到任何逻辑上的理由来解释为什么我不应该仅仅抑制它们,但其他一些人似乎认为使用错误报告抑制它们是一件可怕的事情,但为什么呢 我能找到的最接近答案是在,但这离我正在寻找的答案还很远。隐藏PHP生成的所有通知是否存在某种不可预见的缺点?例如,由于存在错误,要将POST回调中的变量包含到表单中,我只需使用: <?= $_POST['variable'] ?> 对 $data = stdClass; // F
<?= $_POST['variable'] ?>
对
$data = stdClass; // For reference
$limit = 0;
for ($i = 0; $i < $limit; $i++) $data->results[] = $i;
print json_encode($data);
// []
$data=stdClass;//供参考
$limit=0;
对于($i=0;$i<$limit;$i++)$data->results[]=$i;
打印json_encode($data);
// []
问题又来了:我从修正通知错误而不仅仅是抑制它们中获得了什么真正的好处(如果有的话)?它如何能/会损害我的代码?在我看来,你永远不应该抑制错误,不管是哪种错误,通知还是不通知。现在它可能会给您带来一些便利,但在今后的工作中,您将在维护代码时面临许多问题 假设您有一个变量,您希望像上面的第一个示例那样回显。是的,使用isset有点复杂,但也许您的应用程序无论如何都应该处理特殊的空情况,从而改善体验。例如:
if (isset($var)) {
echo $var;
} else {
echo "Nothing is found. Try again later.";
}
如果您只有echo$var如果这是一个用户正在阅读的面向公众的视图,他们将什么也看不到,这可能会引起混乱。当然,这只是修复PHP通知可以改进应用程序的一种特殊情况
在处理PHP代码中的通知时,不应将其视为麻烦或不便,因为代码应该是干净的。当我在源代码中打开它时,我宁愿有一个无需注意的代码,也不愿看到干净的代码。当然,两者都绝对更好!:)
同样,这些错误(即使不是致命的)也会在将来引起问题。如果您已经在做类似于echo$var代码>不检查它,这是一个假设变量存在,即使你知道它可能不存在,它只会给你一个习惯,假设事物存在并工作。现在这可能很小,但过一会儿你会发现你会给自己带来很多很多问题
这些通知的存在是有原因的。如果我们在代码中都做了错误报告(E\u all^E\u NOTICE)
,我们只是对代码不负责任。如果你能修复它,那你为什么懒惰而不这么做呢?当然,在1.0中发布通知,稍后再修复它们,这就是我们都说的。但是,作为一种习惯,最好在第一次完善代码。如果您花15分钟编写被通知困扰的代码,然后在以后的开发中花2小时修复它们,为什么不在编写代码时花一个半小时来完善代码呢
编写好代码应该是一种习惯,而不是一种不便。
出现错误消息是有原因的。尊重他们,修复他们,你就是一个负责任的程序员
您还为代码的未来维护者铺平了道路。假设您有一个不应该忽略的通知。
此通知将隐藏在您通常忽略的所有通知中
无论如何,警告不应该被忽视。您应该始终注意警告以防止错误。每次我的日志文件中有一个通知,我都把它当作一个bug
另外,如果你的站点被很多用户访问,你会得到一个很大的日志文件 根据我的经验,通知通常表示代码中很有可能存在错误,通常情况下,您希望在某个点设置某个变量,但有时却没有,您会开始想为什么页面的某些部分没有显示或开始随机崩溃
当然,计算机并不是那么智能,在某些情况下,代码足够清晰,你不在乎是否有任何警告,但这正是@
操作员的目的。我尊重地不同意一些评论,这些评论建议你永远不要禁止发布通知。如果您知道自己在做什么,我确实认为使用@非常有用,尤其是在处理未设置的变量或数组元素时。别误会我的意思:我同意,在一个没有经验或草率的程序员手中,@可能是邪恶的。但是,考虑这个例子:
public function foo ($array) {
if (isset ($array[0])) {
$bar = $array[0];
} else {
$bar = null;
}
// do something with $bar
}
在功能上与相同
public function foo ($array) {
$bar = @$array[0];
// do something with $bar
}
但IMHO的可读性较低,需要输入更多的工作。在这种情况下,我知道有两种可能:一种是设置变量,另一种是不设置变量。我事先不知道,但在这两种情况下我都必须继续。我认为在那种情况下使用@没有什么错。是的,你也可以写
public function foo ($array) {
$bar = isset ($array[0]) ? $array[0] : null;
// do something with $bar
}
但我发现这只是稍微好一点。对我来说,代码可读性和简洁性本身就是一种价值观,用isset测试来膨胀代码对我来说有点愚蠢
当然,如果我没有弄错的话,使用@执行isset测试要多花一点时间,但老实说:我们的代码中有多少是真正的性能关键的?在一个执行了无数次的循环中,我可能会改用isset,但在大多数情况下,它对用户没有任何影响。那么该特定变量将不会被定义,从而节省额外的带宽。
——协议冲突怎么办?任何著名的API(如twitter和FB)都会返回一致的结果。如果指定结果将位于数组results
中,则它将位于该数组中,无论是否为空。API一致性很重要。假设API的用户和您一样,正在寻找数组[结果]。哦,是的,你没有结果选项,可怜的家伙也在寻找。现在你有问题了。在这些di中
public function foo ($array) {
if (isset ($array[0])) {
$bar = $array[0];
} else {
$bar = null;
}
// do something with $bar
}
public function foo ($array) {
$bar = @$array[0];
// do something with $bar
}
public function foo ($array) {
$bar = isset ($array[0]) ? $array[0] : null;
// do something with $bar
}