索引null变量时未引发php未定义索引通知
我很想知道PHP中的以下行为是否是有意的。而且,如果有意的话,可以通过在数组中创建索引来从空变量初始化数组(如第一个代码段中所做的那样) 但是,如果首先初始化数组(请参见下面的代码),我会得到完全相同的输出,但是当我第一次尝试索引null变量时未引发php未定义索引通知,php,arrays,undefined,Php,Arrays,Undefined,我很想知道PHP中的以下行为是否是有意的。而且,如果有意的话,可以通过在数组中创建索引来从空变量初始化数组(如第一个代码段中所做的那样) 但是,如果首先初始化数组(请参见下面的代码),我会得到完全相同的输出,但是当我第一次尝试$arr[“blah”] 错误报告(E_ALL); $arr=array(); echo($arr[“blah”]==null)?“null”:$arr[“blah”]; $arr[“blah”]=“somevalue”; 回声“”; echo($arr[“blah”]==
$arr[“blah”]
错误报告(E_ALL);
$arr=array();
echo($arr[“blah”]==null)?“null”:$arr[“blah”];
$arr[“blah”]=“somevalue”;
回声“
”;
echo($arr[“blah”]==null)?“null”:$arr[“blah”];
var_转储($arr);
如果数组为空,PHP不会尝试进行比较
在第二种情况下,会发生比较,因为数组已设置。PHP不会检查它是否为空
您正在尝试访问变量$arr[“blah”],而不是在进行比较之前检查它是否已设置
正确的书写方法是:
error_reporting(E_ALL);
$arr = array();
if(isset($arr["blah"])) echo ($arr["blah"]===null) ? "null" : $arr["blah"];
$arr["blah"] = "somevalue";
echo "<br>";
if(isset($arr["blah"])) echo ($arr["blah"]===null) ? "null" : $arr["blah"];
var_dump ($arr);
错误报告(E_ALL);
$arr=array();
如果(isset($arr[“blah”])回波($arr[“blah”]==null)?“null”:$arr[“blah”];
$arr[“blah”]=“somevalue”;
回声“
”;
如果(isset($arr[“blah”])回波($arr[“blah”]==null)?“null”:$arr[“blah”];
var_转储($arr);
事实上,约翰·瓦戈是正确的。如果一个变量是null
,那么像访问数组一样访问它只会返回null
,而不会发出通知。这将在即将发布的7.4版本中进行更改,然后将生成一个通知
Notice: Trying to access array offset on value of type null
实际输出仍然是一样的。这是有意的,但极不可取。它是过去的遗物,不是应该在好代码中使用的任何东西。始终在使用前初始化变量。您应该查看函数
isset()
,为空()
,以及为空()
。欢迎来到松散类型、隐式几乎所有东西的地狱。我可能不完全理解这个问题,但是当“赋值”时,人们会使用=
操作符,而不是将检查作为=
或==
的条件语句,我是否遗漏了什么?在我看来,你不能把一个条件传递成一个echo
@Fred ii-那些条件检查只是为了我调试打印出发生了什么。问题是为什么可以将值赋给空变量的索引。这似乎是个坏主意<代码>$arr=null$arr[“索引”]=“值”代码>可能重复的
error_reporting(E_ALL);
$arr = array();
echo ($arr["blah"]===null) ? "null" : $arr["blah"];
$arr["blah"] = "somevalue";
echo "<br>";
echo ($arr["blah"]===null) ? "null" : $arr["blah"];
var_dump ($arr);
error_reporting(E_ALL);
$arr = array();
if(isset($arr["blah"])) echo ($arr["blah"]===null) ? "null" : $arr["blah"];
$arr["blah"] = "somevalue";
echo "<br>";
if(isset($arr["blah"])) echo ($arr["blah"]===null) ? "null" : $arr["blah"];
var_dump ($arr);
Notice: Trying to access array offset on value of type null