我有以下代码段:
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错误仍然是错误的。
答案 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文件的顶部...