作为开发人员,我与E_NOTICE一起工作。不过最近,有人问我为什么应该修复E_NOTICE错误。我能提出的唯一理由是纠正这些问题的最佳实践。
还有其他人有任何理由证明纠正这些问题所花费的额外时间/成本吗?
更具体地说,如果代码已经起作用,为什么经理应该花钱修复这些问题?
摘要
在PHP运行时配置文件给你一些想法,为什么:
在开发过程中启用E_NOTICE有一些好处。
出于调试目的:NOTICE消息将警告您代码中可能存在的错误。例如,警告使用未分配的值。查找输入错误并节省调试时间非常有用。
NOTICE消息将警告您样式不良。例如,最好将$ arr [item]编写为$ arr [‘item’],因为PHP试图将“
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"];
并没有关键Mary
在$arr
。
用E_NOTICE输出
如果只有程序员E_NOTICE
使用,PHP会显示一条错误消息:
Notice: Use of undefined constant username - assumed 'username' in /home/user/example2.php on line 8
fred
3.最佳原因
如果您没有解决所有E_NOTICE
您认为不是错误的错误,则您可能会变得自满,并开始忽略消息,然后有一天发生真正的错误,您将不会注意到它。
长话短说,我在看西蒙·佩顿·琼斯的演讲,在21:41的时候,他引用了一句话: 我当时正在处理一个bug,很沮丧,在ghci中输入了“修复错误”… 我试过了。 结果: 一开始我只是想,这个到底做了什么? 所以我看了一些类型 因此 但很明显,这仍然没有告诉我多少结果。 然而,更奇怪的是,即使是或的输出也和上面的一样是一个永不间断的输出(除了后者的输出,,缺少首字母)。 我在看什么? 需要明确的是,目前
我不明白try and get中错误处理的含义。(C#)在我的在线课程中使用了以下示例: 这是一个非常简单的例子,但是我为什么要这么做呢? 我是个新手。。。我正在学习编写C#。。。但我试图通过这种方式学习,在最好的情况下,根本不会发生错误。 我为什么要抓住这样的例外而不是
在一个create-react-app typescript项目中,我试图编写这个只是为了快速测试一些东西: 但它给了我以下错误,有一个红色的波浪线: 当提供'-隔离模块'标志时,所有文件都必须是模块。 但是,如果我将文件更改为以下内容,那么一切显然都很好(当然除了未使用的导入): 为什么?这里发生了什么事?< code> - isolatedModules实际上是什么意思/做什么?
我需要将12小时的时间转换为24小时的格式。 我现在已经把12小时的时间硬编码了,以使事情更简单。 我的逻辑:输入sting 07:05:45PM提取最后2个字符。如果AM check为前两个字符,则为12。。如果是,则将其设置为00,否则按原样输出,如果PM检查前两位数字是否为12。。如果是,请保持原样,如果不是,则在前2位加上12 总线错误:10是我运行代码得到的
问题内容: 我见过人们在HTML元素上应用CSS属性。 他们为什么这样做,并且可以解决什么错误? 问题答案: 这提供了一个内部属性,在Internet Explorer 7及更低版本中被称为。 可以通过给元素“布局”来解决许多Internet Explorer的呈现不一致问题。在本文中,作者重点研究了这一复杂问题的某些方面。 “布局”是IE / Win专有的概念,它确定元素如何绘制和绑定其内容,与
我有一些代码,当我运行它时会产生一个错误,说: NoSuchMethod:对null调用了方法“XYZ” 这意味着什么?我该如何修复它?