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

PHP中未定义的索引、isset和引用,php,reference,isset,Php,Reference,Isset,如果访问空引用的未定义索引,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会在第一行抱怨 为什么不把它作为参考呢?我

如果访问空引用的未定义索引,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 = 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"];

你的引用不是数组,所以我认为你的要求没有意义。如果我错了,请纠正我,但通过引用传递函数或循环是正确的吗?@Juan-你是对的,未定义的索引没有意义。不过,我希望能收到一些E_通知。可能是未定义的变量?虽然$array可能在第1行被设置为类似于NULL的值,但一旦创建了数组,它仍然会记住第1行定义的数组深度,即。。有意思。我什么都不想做,我只是好奇你的行为。这是因为你的错误报告设置得有点高。在生产环境中,您将禁用php错误。这个答案并没有解决这个问题,它假设OP不知道他们在说什么,而是展示了一种不同的方式来做某事。但问题是PHP为什么不发出警告。