索引null变量时不会引发php undefined index notice

sus*_*ins 7 php arrays undefined

我很想知道PHP中是否存在以下行为.并且,如果它是预期的,通过在空变量中创建一个索引来初始化一个数组被认为是可接受的(如在第一个代码片段中所做的那样)?

error_reporting(E_ALL);
$arr = null;

echo ($arr["blah"]===null) ? "null" : $arr["blah"];

$arr["blah"] = "somevalue";
echo "<br>";
echo ($arr["blah"]===null) ? "null" : $arr["blah"];
var_dump ($arr);
Run Code Online (Sandbox Code Playgroud)

这输出

null
somevalue

array (size=1)
   'blah' => string 'somevalue' (length=9)
Run Code Online (Sandbox Code Playgroud)

但是,如果首先初始化数组(参见下面的代码),我会得到完全相同的输出,但是当我第一次尝试时会给出"未定义的索引"通知 $arr["blah"]

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);
Run Code Online (Sandbox Code Playgroud)

Joh*_*rgo 2

如果数组为空,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);
Run Code Online (Sandbox Code Playgroud)