你如何处理PHP通知(错误)


How do you handle PHP notice (error)

如果未

设置$n,则以下代码会生成通知。解决它需要一个额外的语句(isset($n))或"声明"$n($n='')。但是这个通知有什么后果呢?下面的代码要整洁得多,假设我们在生产中关闭error_reporing,前端没有明显的区别。有什么不好的事情随之而来吗?预读性、可读性等?(对不起,英语不好)

if($n==1){
   //do something
}
除了

糟糕的编码实践之外,通知没有任何"后果"。 您应该在开发计算机上error_reporting设置为E_ALL进行编码,因此显然结果有很多注意事项......

我认为您的代码实际上并不整洁,因为您正在测试以前未设置的变量。

建议是这样的:

<?php
if (!empty($n) && $n == 1)
{
    //do something
}

empty会自动检查是否存在(就像在它之前调用isset一样),但它也会检查以确保您的值不会与 false0''(空字符串)等值false计算。

注意意味着虽然您的代码将按预期工作,但它并没有"像它应该的那样"编写。这就像编译器告诉你"我知道你的意思,我可以做到,但你不应该依赖这个。请以不同的方式写,这样我就不必做出假设了"。

因此,通知本身并不意味着大多数时候都会发生不好的事情。但是,我不会称任何在代码中接受通知的人为专业程序员,因为修复通知是一项非常简单的任务,没有任何通知表明您很好地理解了该语言的基础知识。如果有人不能或不想做这么多,它说明了一些关于他们的事。

在您的特定示例中,应执行如下操作:

$n = null; // or some other appropriate initial value
// possibly change the value of $n here
if($n==1) {
    //do something
}

请注意,通过编写额外的$n = null,就编译器而言,您并没有使程序有任何不同(无论如何,它最终都会在发出通知的同时自己执行此操作)。但是,就阅读代码的人来说,你使它变得非常不同:有了这个代码,他们就不会有一个"WTF是这个$n来自???"的时刻。

通常在生产环境中,来自PHP库的所有错误报告在显示给最终用户之前都会被关闭或解析(它仍然被记录)。

通知

中没有任何后果,只是通知开发人员,在您的示例中,使用值初始化变量时,这个地方可能会发生不好的事情。

我遇到了一个处理"PHP 通知"可能是有益的函数。

函数为:

geoip_record_by_name()

此函数返回"false",并在数据库中找不到的IP上发送"PHP通知"。标准是为内部网络保留的IP,否则将找不到本地主机。作为一种可怕的做法,此功能将此正常情况视为床编码。WRRRRR!!

在发送到此功能之前,有过滤本地IP的解决方案(假设所有其他地址都被geoip数据库覆盖)。

我认为这个geoip_record_by_name()是害虫函数,处理"PHP通知"是合理的。

与此

害虫功能相关的讨论