Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 数组中未定义变量没有E_通知?_Php_Arrays_Undefined_E Notices - Fatal编程技术网

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的解释