如果未设置$ n,则以下代码会生成通知。解决它需要一个额外的声明(isset($n)
)或“声明”$ n($n=''
)。但是这个通知有什么后果?下面的代码很简洁,让我们说我们在生产中关闭error_reporing没有差异是可见的前端。有什么不好的事吗?预先准备,可读性等? (抱歉英语不好)
if($n==1){
//do something
}
答案 0 :(得分:3)
除了错误的编码实践之外,对于通知没有“后果”。您应该在开发机器上将error_reporting设置为E_ALL
进行编码,因此显然会产生很多通知......
我认为你的代码实际上并不整洁,因为你正在测试一个之前没有设置过的变量。
建议如下:
<?php
if (!empty($n) && $n == 1)
{
//do something
}
empty
会自动检查是否存在(就像之前调用isset
一样),但它也会检查以确保您的值不会评估为false
,其值为false
},0
或''
(空字符串)。
答案 1 :(得分:2)
通知意味着虽然您的代码将按预期工作,但它并不是“应该如此”。这就像编译器告诉你“我知道你在这里是什么意思我能做到的,但你不应该依赖于此。请用不同的方式写出来,所以我不必做出假设”。
因此,通知本身并不意味着大部分时间都会发生不良事件。但是,我不会将在代码中接受通知的人称为专业程序员,因为修改通知是一项非常简单的任务,并且没有任何通知说您很好地理解了语言的基础知识。如果某人不能或不想做这么多,那就说明了一些事情。
在您的具体示例中,应该执行以下操作:
$n = null; // or some other appropriate initial value
// possibly change the value of $n here
if($n==1) {
//do something
}
请注意,通过编写额外的$n = null
,就编译器而言,你不会使程序有任何不同的 (它最终会在它同时完成它无论如何都要发出通知)。但是,就阅读代码的人而言,非常 :使用此代码他们将不会有“WTF做到这一点$n
来了从???”时刻。
答案 2 :(得分:0)
通常在生产环境中,所有来自PHP库的错误报告都会在显示给最终用户之前关闭或解析(它仍然会被记录)。
通知没有任何后果,它只是通知开发人员在这个地方发生了一些不好的事情,在你的例子中用值初始化变量。
答案 3 :(得分:0)
功能是:
geoip_record_by_name()
此函数返回“false”并在其数据库中找不到的IP上发送“PHP Notice”。 标准是无法找到为内部网络或Localhost保留的IP。 作为一种可怕的做法,这个功能将这种正常情况视为床编码。 WRRRRR !!!
在发送到此功能之前,有一个过滤本地IP的解决方案(假设所有其他地址都被geoip数据库覆盖)。
我认为这个geoip_record_by_name()是有害功能,处理“PHP通知”是合理的。