2013-11-15 45 views
5

我很想知道在PHP中的以下行为是否打算。而且,如果有意的话,通过创建一个索引来初始化一个null变量的数组是可以接受的(就像在第一个代码片段中完成的那样)?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); 

此输出

null 
somevalue 

array (size=1) 
    'blah' => string 'somevalue' (length=9) 

然而,如果数组首先被初始化(见下面的代码),我得到完全相同的输出,而是被赋予了“未定义指数”的通知,当我第一次尝试​​

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); 
+0

它的目的,但高度disrecommended。这是过去的遗留问题,而不是任何应该用于良好代码的东西。始终在使用前初始化您的变量。 –

+3

你应该看看函数isset(),is_null()和empty()。欢迎来到松散的类型,隐含的几乎所有的地狱。 – Sammitch

+0

我可能不完全理解这个问题,然而当“分配”时,我会使用'='运算符而不是检查===或===的条件语句吗?国际海事组织,你不能通过条件作为'回声' –

回答

-1

如果数组为空,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);