为什么第一次调用中没有E_NOTICE错误?

时间:2013-12-17 23:05:09

标签: php

我有以下代码段:

 error_reporting(E_ALL | E_STRICT);

    function &getVal() {
       $data = [];

       return $data['hey'];
       //return $whatever; 
    }

    function getVal2() {
       $data = [];

       return $data['hey'];
    }

    var_dump(getVal());  // No E_NOTICE error is issued - why?
    var_dump(getVal2()); // E_NOTICE error is issued.

问题是:为什么第一次通话中没有E_NOTICE错误?解释很可能是创建变量$data['hey']以返回引用。但是,如果未定义$data['hey'](或$whatever...),则发出E_NOTICE错误仍然是错误的。

3 个答案:

答案 0 :(得分:1)

这是预期的行为

http://www.php.net/manual/en/language.references.whatdo.php#language.references.whatdo.assign

  

如果通过引用分配,传递或返回未定义的变量,它   将被创造。

还有一些相关的“错误”:

https://bugs.php.net/bug.php?id=30350

  

好的,看来该元素是因为我们正在尝试而创建的   返回对不存在的引用的引用。

https://bugs.php.net/bug.php?id=27627

  

当您尝试有效地访问不存在的数组元素时   创建它,因此数组中的NULL条目。

答案 1 :(得分:0)

我认为它与PHP中的引用及其弱点有关。

在PHP中引用时,会创建绑定。 PHP对象输入不严格,php不知道引用了哪种对象,解释器假定对象中可能存在['hey']

PHP缺乏后期绑定和严格键入。这就是为什么有时会出现这种“怪异”的东西。

答案 2 :(得分:-3)

仅限error_reporting(1)使用  在php文件的顶部...

相关问题