PHP和C之间的可变范围差异:块范围不完全相同?

时间:2010-05-24 00:19:12

标签: php c scope

以下PHP代码将输出3

function main() {
    if (1) {
        $i = 3;
    }
    echo $i;
}

main();

但是下面的C代码会引发编译错误。

void main() {
    if (1) {
        int i = 3;
    }

    printf("%d", i);
}

因此PHP中的变量不是严格的块范围的?在PHP中,内部块中定义的变量可以在外部块中使用吗?

1 个答案:

答案 0 :(得分:51)

PHP只有函数作用域 - if之类的控制结构不会引入新的作用域。但是,如果您使用未声明的变量,它也不介意。 $i不会存在于main()之外,或者if语句失败,但您仍然可以自由地回应它。

如果您将PHP的error_reporting设置为包含通知,则在尝试使用尚未定义的变量时,它将在运行时发出E_NOTICE错误 。所以如果你有:

function main() {
 if (rand(0,1) == 0) {
  $i = 3;
 }
 echo $i;
}

代码运行正常,但有些执行会回显'3'(当if成功时),有些会引发E_NOTICE并且不回显任何内容,因为$i赢了t在echo语句的范围内定义。

在函数之外,永远不会定义$i(因为函数具有不同的范围)。

了解更多信息:http://php.net/manual/en/language.variables.scope.php

相关问题