警告或注意事项未显示

时间:2018-07-27 09:17:24

标签: php

我在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

2 个答案:

答案 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设计模式,而不是使用键数组。