PHP和C的变量作用域区别:块作用域不完全相同?

2022-08-30 12:27:07

以下 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

PHP只有函数范围 - 控制结构,例如不要引入新的范围。但是,如果您使用尚未声明的变量,它也不介意。 如果 if 语句失败,则不会存在于 外部,但您仍可以自由地回显它。if$imain()

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

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

代码将运行良好,但有些执行将回显“3”(当成功时),而有些执行将引发一个并且不回显任何内容,这将在echo语句的范围内定义。ifE_NOTICE$i

在函数之外,永远不会被定义(因为函数具有不同的作用域)。$i

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


答案 2

推荐