PHP缺失通知

4

这里有一些X文件。

让我们检查这个脚本:https://admin.laysoft.tk/test.php

我们在不同版本的PHP上测试了它。

让我们看看这个:

$tomb = 666; 
var_dump($tomb); 
$a = $tomb['akarmi']; 
var_dump($a); 

结果如下:

int(666) 
NULL 

($tomb 表示数组)

如您所见,我们将 $tomb 初始化为整数类型。

为什么 $a = $tomb['akarmi']; 不会提示没有这个键值的信息?

更新

我已经提交了报告,我非常好奇。

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

更新2

好的,这个问题存在多年了。有很多关于此的问题:

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


检查未显示通知的机器上的php.ini文件。可能是错误报告关闭了,或者配置为仅显示致命错误。 - gabe3886
因为您将$tomb定义为数字,而不是数组。 - Teymur Mardaliyer Lennon
@gabe3886,正如你所看到的,错误报告已经开启,显示错误也已经开启。就像我之前说过的那样,我们在不同的机器和不同版本的PHP上进行了测试。 - vaso123
@TeymurMardaliyerLennon 是的,这就是为什么很有趣,为什么它不会发出通知,说没有这样的键。 - vaso123
2
有人能告诉我,为什么这个问题被踩了吗? - vaso123
1个回答

3

由于PHP的类型转换特性,变量的访问方式取决于如何隐式地进行转换。

然而,转换为数组并没有被实现,甚至没有定义它应该如何工作,正如手册中所说:

自动转换为数组的行为目前未定义。


至于为什么这种情况一直持续到现在......没有人真正能回答这个问题。

是的,但字符串则略有不同,通过字符索引访问字符串 - 这实际上在我链接的同一手册注释中提到。 - Narf
是的,它确实不行。但由于引擎一开始就不知道如何将整数转换为数组,因此它无法检查其是否存在。我知道这很令人沮丧,但保证你不会找到更好的答案。 - Narf
好的,我明白了,我只是在想。2013年以来有大量的错误报告!!!难以置信。 - vaso123
@vaso123 哈哈,我只是想知道你的 PHP 许可证花了多少钱? - YvesLeBorg
1
@YvesLeBorg 1 美元。 - vaso123
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接