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

时间:2011-05-07 12:19:55

标签: php

如果未设置$ n,则以下代码会生成通知。解决它需要一个额外的声明(isset($n))或“声明”$ n($n='')。但是这个通知有什么后果?下面的代码很简洁,让我们说我们在生产中关闭error_reporing没有差异是可见的前端。有什么不好的事吗?预先准备,可读性等? (抱歉英语不好)

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

4 个答案:

答案 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)

我遇到了一个处理“PHP Notice”的功能很有用。

功能是:

geoip_record_by_name()

此函数返回“false”并在其数据库中找不到的IP上发送“PHP Notice”。 标准是无法找到为内部网络或Localhost保留的IP。 作为一种可怕的做法,这个功能将这种正常情况视为床编码。 WRRRRR !!!

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

我认为这个geoip_record_by_name()是有害功能,处理“PHP通知”是合理的。

Discussion related to this pest function