答案 0 :(得分:2)
因为PHP中的变量未显式声明。变量的块范围需要声明变量;否则,构造如:
if ($condition) {
$a = 1;
} else {
$a = 2;
}
print $a;
无法正常工作,因为$a
的“定义”对于首次分配变量的分支来说是本地的。
同样的原则适用于使用隐式变量声明的其他语言,如Python。
答案 1 :(得分:1)
我不确定除了之外我们还能添加什么呢?Rasmus设计它的方式。当时他的想法是什么,我不能说。
您可以在PHP Internals邮件列表中跟踪(或打开)关于它的一些讨论,例如: https://www.mail-archive.com/internals@lists.php.net/msg51630.html。正如那里提到的,在这一点上它将是一个巨大的BC-break,所以它不太可能实现。但最终,这是一个与其他人一样的设计决策,只有最初制作它的人才能给你“正确”的答案。
答案 2 :(得分:0)
据我所知,块级范围是可以在未来任何一天对PHP进行的增强 - 如果现在还不太晚。
在ES6标准化之前,JS不支持块级范围。可能同样的语言进化原理也适用于此。