我正在运行PHP脚本,并继续收到如下错误:
注意:第10行上C:\ wamp \ www \ mypath \ index.php中的未定义变量:my_variable_name
注意:未定义的索引:第11行的my_index C:\ wamp \ www \ mypath \ index.php
第10和11行看起来像这样:
echo "My variable value is: " . $my_variable_name;
echo "My index value is: " . $my_array["my_index"];
这些错误消息是什么意思?
为什么它们突然出现?我曾经使用此脚本多年,但从未遇到任何问题。
我该如何解决?
这是一个 供人们链接为重复的通用参考问题,而不必一遍又一遍地解释该问题。我认为这是必要的,因为在这个问题上,大多数现实世界的答案都是非常具体的。
注意:未定义的变量
从PHP手册的广泛智慧中:
在将一个文件包含在另一个使用相同变量名的文件中的情况下,依靠未初始化变量的默认值是有问题的。这也是一个重大的[安全风险与register_globals的开启。如果使用未初始化的变量,则会发出E_NOTICE级错误,但是如果将元素附加到未初始化的数组,则不会发出E_NOTICE级错误。isset()语言构造可用于检测变量是否已初始化。另外,更理想的方法是empty()的解决方案,因为如果未初始化变量,它不会生成警告或错误消息。
从[PHP文档]:
如果变量不存在,则不会生成警告。这意味着 empty() 本质上与 !isset($ var)|| 等效 。 是$ var
==假
。
这意味着,你可以只使用empty()
来确定变量设置,此外它检查变量针对以下,0
,0.0
,""
,"0"
,null
,false
或[]
。
例:
$o = [];
@$var = ["",0,null,1,2,3,$foo,$o['myIndex']];
array_walk($var, function($v) {
echo (!isset($v) || $v == false) ? 'true ' : 'false';
echo ' ' . (empty($v) ? 'true' : 'false');
echo "\n";
});
尽管PHP不需要变量声明,但它确实推荐这样做,以避免某些安全漏洞或bug,因为这些漏洞或bug可能会忘记为变量提供值,该变量将在脚本的后面使用。在未声明变量的情况下,PHP会发出一个非常低级的错误,E_NOTICE
默认情况下甚至不会报告该错误,但《手册》[建议]在开发过程中允许这样做。
解决问题的方法:
isset()
/ !empty()
来检查它们是否在引用它们之前声明,如://Initializing variable
$value = “”; //Initialization value; Examples
//”” When you want to append stuff later
//0 When you want to add numbers later
//isset()
$value = isset($_POST[‘value’]) ? $_POST[‘value’] : ‘’;
//empty()
$value = !empty($_POST[‘value’]) ? $_POST[‘value’] : ‘’;
自PHP 7.0起,它变得更加干净,现在您可以使用null合并运算符:
// Null coalesce operator - No need to explicitly initialize the variable.
$value = $_POST['value'] ?? '';
为E_NOTICE 设置自定义错误处理程序,并将消息重定向到标准输出之外(也许重定向到日志文件):
set_error_handler('myHandlerForMinorErrors', E_NOTICE | E_STRICT)
禁用E_NOTICE的报告功能。快速排除正义的方法E_NOTICE
是:
error_reporting( error_reporting() & ~E_NOTICE )
使用@运算符抑制错误。
注意: 强烈建议仅实施第1点。
注意:未定义的索引/未定义的偏移量
当您(或PHP)尝试访问数组的未定义索引时,将显示此通知。
解决问题的方法:
isset()
或array_key_exists()
://isset()
$value = isset($array['my_index']) ? $array['my_index'] : '';
//array_key_exists()
$value = array_key_exists('my_index', $array) ? $array['my_index'] : '';
list()
当它尝试访问不存在的数组索引时,语言构造可能会生成以下代码:list($a, $b) = array(0 => 'a');
//or
list($one, $two) = explode(',', 'test string');
两个变量用于访问两个数组元素,但是只有一个数组元素index 0
,因此将生成:
注意:未定义的偏移量:1
$_POST
/ $_GET
/ $_SESSION
可变
使用或时$_POST
,以上提示经常出现。对于,您只需要在使用索引之前检查索引是否存在。因为您必须确保您以会话开始,并且索引也存在。$_GET``$_SESSION``$_POST``$_GET``$_SESSION``session_start()
还要注意,所有3个变量都是超全局变量,并且都是大写的。
问题内容: 我正在运行一个 PHP 脚本并继续收到如下错误: 注意:未定义变量:第 10 行 C:\wamp\www\mypath\index.php 中的 my_variable_name 注意:未定义索引:第 11 行的 my_index C:\wamp\www\mypath\index.php 第 10 行和第 11 行如下所示: 这些错误消息的含义是什么? 为什么它们会突然出现?我曾经使用
本文向大家介绍PHP 注意:未定义的索引 PHP Notice: Undefined index,包括了PHP 注意:未定义的索引 PHP Notice: Undefined index的使用技巧和注意事项,需要的朋友参考一下 示例 原因: 尝试通过数组中不存在的键访问数组 可能的解决方案: 访问前请检查可用性。采用: isset() array_key_exists()
我正在运行一个PHP脚本,并继续收到如下错误: 注意:第10行C:\wamp\www\myPath\index.php中未定义的变量:my_variable_name 注意:第11行未定义索引:my_index C:\wamp\www\myPath\index.php 第10行和第11行如下所示: 这些错误信息的含义是什么? 为什么他们突然出现?我曾经使用这个脚本多年,我从来没有遇到过任何问题。
问题内容: 我想捕获此错误: 编辑: 实际上,我在以下行中收到此错误: 问题答案: 您需要定义您的自定义错误处理程序,例如:
我的一些产品页面不断向我显示以下信息: “注意:未定义索引:第411行/home/paper/osconvites/vqmod/vqcache/vq2-catalog\u model\u catalog\u product.php中的选项值注意:未定义索引:第411行/home/paper/osconvites/vqmod/vqcache/vq2-catalog\u product.php中的选项
简短模式的含义是定义的同时初始化 package main import "fmt" func main() { num := 10 num := 20 // 编译报错, 重复定义 fmt.Println("num = ", num) } 一定不要把 := 当做赋值运算符来使用 package main import "fmt" var num = 10 // 定义一个全局变