我在PHP 7.2.x上有以下代码:
class Test
{
public $prop = null;
}
$temp = new Test();
var_dump($temp->prop['fff']);
但是当temp->prop['fff']
不存在时为什么没有报告警告?
编辑1: 抱歉,我忘了在此处添加此代码:
ini_set('display_startup_errors',1);
ini_set('display_errors',1);
error_reporting(-1); //all errors
答案 0 :(得分:4)
我在documentation中发现了一些东西:
注意:
解引用不是字符串的标量值的数组会默默地产生NULL,即不发出错误消息。
尽管不清楚原因,但这似乎是设计使然。就个人而言,我至少会期望收到E_NOTICE。
该页面的注释中有一个指向bug report的链接,该链接又被标记为重复的of another bug。这似乎既不固定也不封闭。因此,将来可能会对其进行更改/修复。
答案 1 :(得分:0)
这是一个有趣的观察,(所有评论也是错误的)
error_reporting(E_ALL);
ini_set('display_errors',1);
ini_set('display_startup_errors',1);
class Test
{
public $prop = null;
}
$temp = new Test();
var_dump($temp->prop);
$variable = null;
var_dump($variable['test']);
即使强制执行错误报告,上述代码也不会出现问题。 我的猜测是不存在的键警告仅适用于数组,而不是null。 事实是,我无法查明原因和报告的确切原因,但是再也找不到任何人会执行这种实现的任何真正原因(也许这就是未显示警告的原因)。 当您需要特定的元素来需要特定的键时,最好的选择是实现ValueObject设计模式,而不是使用键数组。