A. Cedano Asked: 2020-06-17 03:36:48 +0800 CST 2020-06-17 03:36:48 +0800 CST 2020-06-17 03:36:48 +0800 CST PHP:“注意:未定义的变量”、“注意:未定义的索引”和“注意:未定义的偏移量”是什么意思? 772 当通知发生时,代码可能会工作,但可能无法显示我们期望的内容。 我认为这是我们在 PHP 中可以更频繁地拥有的三种类型的新闻。 注意:未定义的变量 注意:未定义的索引 注意:未定义的偏移量 这三个新闻是什么意思,又是什么产生的? 笔记: 这个问题存在于英语中,想法是用西班牙语也有一个很好的答案,这有助于理解 PHP总是用英语向我们展示的问题。 php 4 Answers Voted Best Answer Alvaro Montoro 2020-06-17T04:56:50+08:002020-06-17T04:56:50+08:00 Notice: Undefined variable当您在操作中使用变量但之前未定义该变量时发生。例如: <?php $a1 = "Hola Caracola"; print_r($a2); // $a2 no se ha definido antes (a veces causado por errores tipográficos) Notice: Undefined offset当您在数组中尝试访问该数组中不存在的数字索引时会发生。例如: <?php $miArray = array(1,2,3); // 3 posiciones, índices del 0 al 2 print_r($miArray[3]); // Acceso al índice 3 que no existe (PHP empieza en 0) Notice: Undefined index当您尝试访问不存在的数组中的字母数字索引时会发生。几个例子: <?php $miArray = array(0 => "Hola", "b" => "Caracola"); print_r($miArray["a"]); // El índice `a` no existe, sólo `0` o `b` print_r($_GET["parametroQueNoExisteEnElQueryString"]); Juan 2020-06-17T05:01:50+08:002020-06-17T05:01:50+08:00 变量:在 php 中我们使用以 开头的名称引用的内存空间,$例如,$edad它可以是一个变量来存储一个人的年龄。 如果在定义变量之前尝试读取(使用)变量,或者超出其可见范围,PHP 将返回"Undefined variable"。 $b使用之前未提及的示例: $a = 1; if($a == 1){ $a = $b; } $b在其可见性范围之外引用它的示例: $a = 1; if($a == 1){ $b = 10; } $a = $b; 通过提及变量,它已经被定义,尽管通常这个定义伴随着初始化,因为如果我们定义一个变量,它具有一个有意义的初始值是合乎逻辑的。解决方案是在使用变量之前定义变量,并在需要它的可见性范围内定义变量示例:$b之前或之后$a: $a = 1; $b; //Acá ya queda definida pero sin valor inicial if($a == 1){ ... $a = 1; $b = 5; //Acá ya queda inicializada (definida + valor inicial) if($a == 1){ ... Index:是用作引用关联数组中的值的键的字符串。在此示例中,名称和姓氏是关联数组的索引$estudiante: $estudiante['nombre'] = 'Juan'; $estudiante['apellido'] = "Gomez"; 未定义的索引意味着当我们想从数组中读取一个值时我们作为索引传递的字符串不存在。在示例中,索引不存在,因此它返回Undefined Index。 domicilio$dom = $estudiante['domicilio']; 您可以使用该功能验证索引是否存在array_key_exists($index); Offset:与Index类似,但对于索引是反映数组中位置(或offset)的整数的常见数组。当尝试在不存在的位置读取数组的值时,我们得到一个Undefined Offset。例子: $arr[0] = "caballo"; $arr[1] = "tigre"; $animal = $arr[2]; // Undefined Offset 避免这些错误的一种方法是检查索引是否大于 0 且小于数组 ( count($arr)) 中的元素数; rafael lopez 2020-08-31T15:32:19+08:002020-08-31T15:32:19+08:00 我以为是谷歌翻译。我用来检查数组,检查关键示例检查cookies,如果没有设置它: if (!array_key_exists(COOKIE_ID,$_COOKIE)){Setcookie(COOKIE_ID, 'Y2l1ZGFkYW5v', time() + (3600),'','','', true);} NetVicious 2020-06-28T07:54:20+08:002020-06-28T07:54:20+08:00 首先是通知,我会更好地翻译为通知。 通知不是错误。它们确实是警告,在这种情况下,它只是警告您这些索引在数组中不存在。 要防止这些消息出现在网络上,您有多种选择。 在显示通知的 PHP 配置中删除 编辑 php.ini 并找到指令error_reporting 就在上面,您将了解它的确切含义。以我的生产为例,我已经指出了这一点: error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT & ~E_WARNING & ~E_NOTICE 在那里我表明我想要所有的错误,但我不想要弃用的函数警告,也不想要严格的警告,也不想要警告,也不想要通知。 在每个 php 文件中禁用通知 在每个 php 文件中,您必须执行此函数,以便它不会在 php.ini 生成的网页中向您显示这些错误。 error_reporting(E_ALL & ~E_DEPRECATED & ~E_STRICT & ~E_WARNING & ~E_NOTICE); 程序正确检测它是否存在 在 php 中有一个调用函数isset(),如果变量已定义且不为空,则该函数仅返回。 您可以创建一个变量,根据数组中是否存在前一个索引,您可以创建一个变量,而不是直接使用具有索引的数组,而$arr['indice']该变量是否具有值。该 $index 变量将不再发出通知,因为它总是有一个值。 $indice = ( isset($arr['indice'] ) ? $arr['indice'] : ''; 上面这行代码也等价于: if ( isset($arr['indice'] ) { $indice = $arr['indice']; } else { $indice = '': }
Notice: Undefined variable
当您在操作中使用变量但之前未定义该变量时发生。例如:Notice: Undefined offset
当您在数组中尝试访问该数组中不存在的数字索引时会发生。例如:Notice: Undefined index
当您尝试访问不存在的数组中的字母数字索引时会发生。几个例子:变量:在 php 中我们使用以 开头的名称引用的内存空间,
$
例如,$edad
它可以是一个变量来存储一个人的年龄。如果在定义变量之前尝试读取(使用)变量,或者超出其可见范围,PHP 将返回"Undefined variable"。
$b
使用之前未提及的示例:$b
在其可见性范围之外引用它的示例:通过提及变量,它已经被定义,尽管通常这个定义伴随着初始化,因为如果我们定义一个变量,它具有一个有意义的初始值是合乎逻辑的。解决方案是在使用变量之前定义变量,并在需要它的可见性范围内定义变量示例:
$b
之前或之后$a
:Index:是用作引用关联数组中的值的键的字符串。在此示例中,名称和姓氏是关联数组的索引
$estudiante
:未定义的索引意味着当我们想从数组中读取一个值时我们作为索引传递的字符串不存在。在示例中,索引不存在,因此它返回Undefined Index。
domicilio
$dom = $estudiante['domicilio'];
您可以使用该功能验证索引是否存在
array_key_exists($index);
Offset:与Index类似,但对于索引是反映数组中位置(或offset)的整数的常见数组。当尝试在不存在的位置读取数组的值时,我们得到一个Undefined Offset。例子:
避免这些错误的一种方法是检查索引是否大于 0 且小于数组 (
count($arr)
) 中的元素数;我以为是谷歌翻译。我用来检查数组,检查关键示例检查cookies,如果没有设置它:
if (!array_key_exists(COOKIE_ID,$_COOKIE)){Setcookie(COOKIE_ID, 'Y2l1ZGFkYW5v', time() + (3600),'','','', true);}
首先是通知,我会更好地翻译为通知。
通知不是错误。它们确实是警告,在这种情况下,它只是警告您这些索引在数组中不存在。
要防止这些消息出现在网络上,您有多种选择。
在显示通知的 PHP 配置中删除
编辑 php.ini 并找到指令
error_reporting
就在上面,您将了解它的确切含义。以我的生产为例,我已经指出了这一点:
在那里我表明我想要所有的错误,但我不想要弃用的函数警告,也不想要严格的警告,也不想要警告,也不想要通知。
在每个 php 文件中禁用通知
在每个 php 文件中,您必须执行此函数,以便它不会在 php.ini 生成的网页中向您显示这些错误。
程序正确检测它是否存在
在 php 中有一个调用函数
isset()
,如果变量已定义且不为空,则该函数仅返回。您可以创建一个变量,根据数组中是否存在前一个索引,您可以创建一个变量,而不是直接使用具有索引的数组,而
$arr['indice']
该变量是否具有值。该 $index 变量将不再发出通知,因为它总是有一个值。上面这行代码也等价于: