作为一名开发人员,我的工作是打开E_NOTICE。但最近,有人问我为什么要修复E_NOTICE错误。我能想到的唯一原因是,纠正这些问题是最佳实践。
有没有其他人有任何理由证明花在纠正这些问题上的额外时间/成本是合理的?
更具体地说,如果代码已经可以工作,为什么经理还要花钱来修复这些问题呢?
发布于 2011-02-22 11:27:47
摘要
PHP Runtime Configuration Docs会告诉您一些原因:
在开发期间启用E_NOTICE的
有一些好处。
出于调试目的:注意消息将警告您代码中可能存在的bug。例如,警告使用未赋值的值。查找打字错误并节省调试时间是非常有用的。
注意,消息将警告您错误的风格。例如,$arritem最好写成$arr'item‘,因为它试图把"item“当作常量。如果它不是常量,PHP就假定它是数组的字符串索引。
这里有更详细的解释……
1.检测拼写错误的
E_NOTICE错误的主要原因是打字错误。
示例- notice.php
<?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的输出
Please log in...不对!你不是那个意思!
使用E_NOTICE的输出
Notice: Undefined variable: usernmae in /home/user/notice.php on line 3
Please log in...在PHP中,不存在的变量将返回null,而不是导致错误,这可能会导致代码的行为与预期的不同,因此最好注意E_NOTICE警告。
2.检测不明确的数组索引
它还会警告您可能会更改的数组索引,例如
示例-今天的代码看起来像这样
<?php
$arr = array();
$arr['username'] = 'fred';
// then further down
echo $arr[username];
?>不带E_NOTICE的输出
fred示例-明天您将包含一个库
<?php
// tomorrow someone adds this
include_once('somelib.php');
$arr = array();
$arr['username'] = 'fred';
// then further down
echo $arr[username];
?>和库做了类似这样的事情:
<?php
define("username", "Mary");
?>新输出
空,因为它现在扩展为:
echo $arr["Mary"];并且$arr中没有密钥Mary。
使用E_NOTICE的输出
如果程序员打开了E_NOTICE,PHP就会打印一条错误消息:
Notice: Use of undefined constant username - assumed 'username' in /home/user/example2.php on line 8
fred3. 的最佳理由
如果您不修复您认为不是错误的所有E_NOTICE错误,您可能会变得自满,并开始忽略这些消息,然后有一天当真正的错误发生时,您将不会注意到它。
发布于 2011-02-22 11:21:38
因为E_NOTICE指示错误。
PHP实在太宽宏大量了,不能这么叫它。
例如,访问一个未定义的变量会产生一个E_NOTICE。
如果这种情况经常发生,例如因为你没有正确地初始化你的变量,你的应用程序到处抛出通知,你将如何区分“未初始化的变量”和你真正笨手笨脚的变量名之间的区别?
这可能会触发通知,但会按预期工作,因此您可以忽略该通知:
if ($_GET['foo']) ...另一方面,这会浪费你半天的时间,因为你忽略了通知,试图弄清楚为什么你的"bar()函数不起作用“:
$foo = bar();
if ($too) ...如果不“修复”前一种情况,在前一种情况下,变量可能合法地不存在,那么在第二种情况下,就不能有意义地使用通知来捕获拼写错误。
注意事项可以帮助你调试你的应用程序。如果你忽视它们,你只会让你自己的生活变得更加困难。
发布于 2011-02-22 11:20:42
这类错误是很好的修复方法,因为它们是我们所说的“代码气味”,它们暗示了另一个问题(例如输入错误的变量名或未定义变量的使用/方法的错误使用),或者它们可能会在您反射/扩展系统时导致错误。
当然,我在这里所说的并不是100%真实的。
https://stackoverflow.com/questions/5073642
复制相似问题