首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么要修复E_NOTICE错误?

为什么要修复E_NOTICE错误?
EN

Stack Overflow用户
提问于 2011-02-22 11:15:50
回答 5查看 9.4K关注 0票数 32

作为一名开发人员,我的工作是打开E_NOTICE。但最近,有人问我为什么要修复E_NOTICE错误。我能想到的唯一原因是,纠正这些问题是最佳实践。

有没有其他人有任何理由证明花在纠正这些问题上的额外时间/成本是合理的?

更具体地说,如果代码已经可以工作,为什么经理还要花钱来修复这些问题呢?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-02-22 11:27:47

摘要

PHP Runtime Configuration Docs会告诉您一些原因:

在开发期间启用E_NOTICE的

有一些好处。

出于调试目的:注意消息将警告您代码中可能存在的bug。例如,警告使用未赋值的值。查找打字错误并节省调试时间是非常有用的。

注意,消息将警告您错误的风格。例如,$arritem最好写成$arr'item‘,因为它试图把"item“当作常量。如果它不是常量,PHP就假定它是数组的字符串索引。

这里有更详细的解释……

1.检测拼写错误的

E_NOTICE错误的主要原因是打字错误。

示例- notice.php

代码语言:javascript
复制
<?php
$username = 'joe';        // in real life this would be from $_SESSION

// and then much further down in the code...

if ($usernmae) {            // typo, $usernmae expands to null
    echo "Logged in";
}
else {
    echo "Please log in...";
}
?>

不带E_NOTICE的输出

代码语言:javascript
复制
Please log in...

不对!你不是那个意思!

使用E_NOTICE输出

代码语言:javascript
复制
Notice: Undefined variable: usernmae in /home/user/notice.php on line 3
Please log in...

在PHP中,不存在的变量将返回null,而不是导致错误,这可能会导致代码的行为与预期的不同,因此最好注意E_NOTICE警告。

2.检测不明确的数组索引

它还会警告您可能会更改的数组索引,例如

示例-今天的代码看起来像这样

代码语言:javascript
复制
<?php

$arr = array();
$arr['username'] = 'fred';

// then further down

echo $arr[username];
?>

不带E_NOTICE输出

代码语言:javascript
复制
fred

示例-明天您将包含一个库

代码语言:javascript
复制
<?php
// tomorrow someone adds this
include_once('somelib.php');

$arr = array();
$arr['username'] = 'fred';

// then further down

echo $arr[username];
?>

和库做了类似这样的事情:

代码语言:javascript
复制
<?php
define("username", "Mary");
?>

新输出

空,因为它现在扩展为:

代码语言:javascript
复制
echo $arr["Mary"];

并且$arr中没有密钥Mary

使用E_NOTICE输出

如果程序员打开了E_NOTICE,PHP就会打印一条错误消息:

代码语言:javascript
复制
Notice: Use of undefined constant username - assumed 'username' in /home/user/example2.php on line 8
fred

3. 的最佳理由

如果您不修复您认为不是错误的所有E_NOTICE错误,您可能会变得自满,并开始忽略这些消息,然后有一天当真正的错误发生时,您将不会注意到它。

票数 33
EN

Stack Overflow用户

发布于 2011-02-22 11:21:38

因为E_NOTICE指示错误

PHP实在太宽宏大量了,不能这么叫它。

例如,访问一个未定义的变量会产生一个E_NOTICE

如果这种情况经常发生,例如因为你没有正确地初始化你的变量,你的应用程序到处抛出通知,你将如何区分“未初始化的变量”和你真正笨手笨脚的变量名之间的区别?

这可能会触发通知,但会按预期工作,因此您可以忽略该通知:

代码语言:javascript
复制
if ($_GET['foo']) ...

另一方面,这会浪费你半天的时间,因为你忽略了通知,试图弄清楚为什么你的"bar()函数不起作用“:

代码语言:javascript
复制
$foo = bar();
if ($too) ...

如果不“修复”前一种情况,在前一种情况下,变量可能合法地不存在,那么在第二种情况下,就不能有意义地使用通知来捕获拼写错误。

注意事项可以帮助你调试你的应用程序。如果你忽视它们,你只会让你自己的生活变得更加困难。

票数 16
EN

Stack Overflow用户

发布于 2011-02-22 11:20:42

这类错误是很好的修复方法,因为它们是我们所说的“代码气味”,它们暗示了另一个问题(例如输入错误的变量名或未定义变量的使用/方法的错误使用),或者它们可能会在您反射/扩展系统时导致错误。

当然,我在这里所说的并不是100%真实的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5073642

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档