【发布时间】:2011-10-30 06:37:46
【问题描述】:
我已经压制通知很长一段时间了,没有任何问题,但我开始怀疑我是否做对了。我似乎找不到任何合乎逻辑的理由为什么我不应该压制它们,但其他一些人似乎认为使用 error_reporting 压制它们是一件可怕的事情,但为什么呢?
我能找到的最接近答案的是this question,但这与我正在寻找的答案相去甚远。隐藏 PHP 生成的所有通知是否有某种不可预见的缺点?例如,由于出现错误,要将来自 POST 调用的变量包含回表单中,我会简单地使用:
<?= $_POST['variable'] ?>
这将生成一个 PHP 通知。要修复该通知,我可以使用以下内容:
<?= isset($_POST['variable']) ? $_POST['variable'] : '' ?>
但是,这真的有必要吗?我的代码实际上是否会从这样做中受益,而不仅仅是回显变量是否存在并可能创建 PHP 通知?在我看来,能够忽略通知是使用 PHP 的一个好处,因为这样您就不必担心是否定义了变量,尤其是对于像这样的例子,它似乎并不重要。
我还利用 PHP 的能力,根据变量的使用方式自动更改变量的类型/转换,您经常会发现如下代码 sn-ps:
for ($i = 0; $i < $limit; $i++) $results[] = $i; // Example
$results 之前没有定义,但是当我尝试将新项目作为数组添加到其中时,它变成了一个数组。我有点喜欢这样做,因为如果没有结果被添加到数组中并且我需要存储该信息或出于任何原因将其转换为 JSON,那么将不会定义该特定变量,从而节省额外的带宽,即使它是分钟。
$data = stdClass; // For reference, in my case this would be defined before this code
$data->results = array();
$limit = 0;
for ($i = 0; $i < $limit; $i++) $data->results[] = $i;
print json_encode($data);
// {"results":[]}
对
$data = stdClass; // For reference
$limit = 0;
for ($i = 0; $i < $limit; $i++) $data->results[] = $i;
print json_encode($data);
// []
问题又来了:如果有的话,我从修复通知错误中获得什么真正的好处,而不是仅仅抑制它们?它如何/会损害我的代码?
【问题讨论】:
-
then that particular variable will not be defined and thus save additional bandwidth--- 协议违规怎么办?任何著名的 API(例如 twitter 和 FB)都会返回一致的结果。如果指定结果将在数组results中,那么它将在那里,无论是否为空。 -
API 一致性很重要。想象一下 API 的用户和您一样,正在寻找数组 [结果]。哦,是的,您没有结果选项,而可怜的家伙也在寻找它。现在你有问题了。
-
在这些讨论中,人们总是宣称只有一种解决方案可以解决所有问题。您展示的两种情况在结构上非常不同。在第一种情况下忽略通知不会产生事实后果,而在第二种情况下会利用一种可以实际上改变结果的语言语义。
-
如果您是一位经验丰富的程序员和开发人员,并且您需要使用 PHP 作为您工作的一部分,那么这是 PHP 缺乏 统一异常处理的(不受欢迎的)解决方法之一 ...仔细想想。如果它不能解决某人对某个问题的想法,那为什么用语言at all stackoverflow.com/questions/1087365
标签: php suppress-warnings notice