Php 数组中未定义变量没有E_通知?
所以。。在使用Php 数组中未定义变量没有E_通知?,php,arrays,undefined,e-notices,Php,Arrays,Undefined,E Notices,所以。。在使用$array=array()创建数组时,我仍然对此感到困惑然后手动设置变量,如: <?php $array[] = 1; $array['type'] = 2; $array['number'] = 3; 会的。如果已打开错误报告,则应显示类似于以下警告的警告: 注意:未定义的索引:在/path/to/script.php第X行中没有 要进行检查,请尝试以下操作: <?php ini_set('display_errors',1); error_reporting
$array=array()创建数组时,我仍然对此感到困惑代码>然后手动设置变量,如:
<?php
$array[] = 1;
$array['type'] = 2;
$array['number'] = 3;
会的。如果已打开错误报告,则应显示类似于以下警告的警告:
注意:未定义的索引:在/path/to/script.php第X行中没有
要进行检查,请尝试以下操作:
<?php
ini_set('display_errors',1);
error_reporting(E_ALL);
$array = array();
echo $array['none'];
它会的。如果已打开错误报告,则应显示类似于以下警告的警告:
注意:未定义的索引:在/path/to/script.php第X行中没有
要进行检查,请尝试以下操作:
<?php
ini_set('display_errors',1);
error_reporting(E_ALL);
$array = array();
echo $array['none'];
所有这些也是:
在开发过程中启用E_通知有一些好处
出于调试目的:注意消息将警告您代码中可能存在的错误。例如,使用未赋值的值会受到警告。查找输入错误和节省调试时间非常有用
注意,消息将警告您不良样式。例如,$arr[item]最好写为$arr['item'],因为PHP试图将“item”视为常量。如果它不是常量,PHP将假定它是数组的字符串索引
这很简单:当您访问一个不存在的键,并为其分配一个新值时,PHP将创建该键,并将其添加到列表(或数组)中。但是,当您尝试访问一个不存在的密钥并尝试回显它的值时,PHP不会崩溃,但它会让您知道您的代码包含一个可能的错误:
$arr = array('foo' => 'bar');
echo $arr['fo'];
这会发出通知,因为我的代码可能包含输入错误。我可能希望fo
键存在,但显然它不存在,因此我需要进一步处理我的代码。发布此通知的另一个原因是,对不存在的属性/密钥的查找“缓慢”。为了让PHP知道密钥不存在,必须扫描整个数组。这也是不理想的,尽管有时不可避免。如果您的代码发布了大量的
E_通知
,那么一些简单的If
,比如:
if (!isset($arr['fo']))
{
$arr['fo'] = '';
}
echo $arr['fo'];
虽然会添加更多代码,但会有效地加快代码的速度。一点也不,因为发布通知不是免费的(虽然没有那么贵,但也不是免费的)
其他好处:
例如,当您忘记引用数组键时,通知也会让您知道
echo $arr[foo];
echo $arr['foo'];
最初,两者都将回显条
,但让我们在此添加一行代码:
define('foo', 'bar');
echo $arr[foo];
echo $arr['foo'];
这不会,因为foo
现在是一个常量,所以$arr[foo]
等于$arr['bar']代码>,这是一个未定义的索引。关闭通知只会回显NULL的字符串表示形式,这是一个空字符串
基本上,通知可以帮助你。使用它们,倾听它们,并修复它们。如果您的站点已损坏,请修复它。如果您习惯于忽略这些通知,您可能会将ini文件设置为更“宽容”的设置,从而变得懒惰。
随着时间的推移,您的代码将变得越来越凌乱/难闻,直到您真的有一个难以跟踪的bug。您将决定将错误报告改为E|u STRICT | E|u ALL
,并且无法看到指出错误实际位置的实际通知/警告,因为您的屏幕将布满E|u notice undefined index/variable
。所有这些也是:
在开发过程中启用E_通知有一些好处
出于调试目的:注意消息将警告您代码中可能存在的错误。例如,使用未赋值的值会受到警告。查找输入错误和节省调试时间非常有用
注意,消息将警告您不良样式。例如,$arr[item]最好写为$arr['item'],因为PHP试图将“item”视为常量。如果它不是常量,PHP将假定它是数组的字符串索引
这很简单:当您访问一个不存在的键,并为其分配一个新值时,PHP将创建该键,并将其添加到列表(或数组)中。但是,当您尝试访问一个不存在的密钥并尝试回显它的值时,PHP不会崩溃,但它会让您知道您的代码包含一个可能的错误:
$arr = array('foo' => 'bar');
echo $arr['fo'];
这会发出通知,因为我的代码可能包含输入错误。我可能希望fo
键存在,但显然它不存在,因此我需要进一步处理我的代码。发布此通知的另一个原因是,对不存在的属性/密钥的查找“缓慢”。为了让PHP知道密钥不存在,必须扫描整个数组。这也是不理想的,尽管有时不可避免。如果您的代码发布了大量的
E_通知
,那么一些简单的If
,比如:
if (!isset($arr['fo']))
{
$arr['fo'] = '';
}
echo $arr['fo'];
虽然会添加更多代码,但会有效地加快代码的速度。一点也不,因为发布通知不是免费的(虽然没有那么贵,但也不是免费的)
其他好处:
例如,当您忘记引用数组键时,通知也会让您知道
echo $arr[foo];
echo $arr['foo'];
最初,两者都将回显条
,但让我们在此添加一行代码:
define('foo', 'bar');
echo $arr[foo];
echo $arr['foo'];
这不会,因为foo
现在是一个常量,所以$arr[foo]
等于$arr['bar']代码>,这是一个未定义的索引。关闭通知只会回显NULL的字符串表示形式,这是一个空字符串
基本上,通知可以帮助你。使用它们,倾听它们,并修复它们。如果您的站点已损坏,请修复它。如果您习惯于忽略这些通知,您可能会将ini文件设置为更“宽容”的设置,从而变得懒惰。
随着时间的推移,您的代码将变得越来越凌乱/难闻,直到您真的有一个难以跟踪的bug。您将决定将错误报告改为E|u STRICT | E|u ALL
,并且无法看到指出错误实际位置的实际通知/警告,因为您的屏幕将布满E|u notice undefined index/variable
。谢谢Elias的解释