PHP 中未定义的索引、isset 和引用


Undefined index, isset and references in PHP

如果访问空引用的未定义索引,PHP 不会抛出任何错误。

<?php
$array = &$foo['bar'];
if ($array['stuff']) echo 'Cool'; // No PHP notice
$array['thing'] = 1; // Array created; $foo['bar']['thing'] == 1
$array['stuff']; // PHP notice

如果$array不是参考,PHP 会在第一行抱怨。

为什么不作为参考?我是否需要为空引用而烦恼 isset,还是 PHP 在内部抱怨并且不让我知道?

在你的代码中,$array为空。以下代码也不会给您通知:

$b = null;
if ($b['stuff']) echo 'cool';

这很奇怪,文档中的这条评论指出了这一事实。

您必须提高错误报告级别。您的示例$array['stuff']将引发有关找不到索引的警告。我经常将键入测试与评估结合起来,以防止这些警告:

if( array_key_exists("blah",$arr) && strlen($arr['blah']) > 0 ) { 
    ; // do stuff here
}
我经常将变量

与数组名称组合在一起,因为每当我必须将复制代码剪切粘贴到下一部分以执行相同的操作时,我宁愿创建一个变量名称数组,然后遍历变量名称。最荒谬的条件是,当我有计费和运输数据要操作时,我将有一个数组变量名称$BorS或者只是$BS,然后在顶部设置$BorS="shipping";并最终得到非常有趣的语句,例如:

${$BorS."data"}[${$BorS."_addr1"}]=$input_array[$BorS."_address_line_1"];

为什么不直接做:

$array = array();