设置$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
一样),但它也会检查以确保您的值不会与 false
、0
或 ''
(空字符串)等值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通知"是合理的。
与此害虫功能相关的讨论