为什么PHP没有块级范围?

时间:2017-12-27 06:07:05

标签: php

PHP manual表示:

  

函数内使用的任何变量默认限制为本地函数范围

我找不到PHP设计师做出的这个架构决策的任何理由。为什么PHP设计为只具有本地功能级范围,没有块级范围?

3 个答案:

答案 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不支持块级范围。可能同样的语言进化原理也适用于此。