Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP和C之间的变量范围差异:块范围不完全相同?_Php_C_Scope - Fatal编程技术网

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

PHP和C之间的变量范围差异:块范围不完全相同?,php,c,scope,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中,在内部块中定义的变量可以在外部块中使用?PHP只有函数作用域-控制结构,例如如果不

下面的PHP代码将输出
3

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

main();
但是下面的C代码将引发编译错误

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

    printf("%d", i);
}

那么PHP中的变量没有严格的块作用域?在PHP中,在内部块中定义的变量可以在外部块中使用?

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

如果您将PHP的错误报告设置为包含通知,那么如果您尝试使用尚未定义的变量,它将在运行时发出
E\u通知
错误。如果你有:

function main() {
 if (rand(0,1) == 0) {
  $i = 3;
 }
 echo $i;
}
代码可以正常运行,但有些执行会回显“3”(当
if
成功时),有些执行会发出
E_通知
而不回显,因为
$i
不会在echo语句的范围内定义

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


更多信息:

如果你自己已经回答过,这不是一个真正的问题。@Byron-我只是想确认一下。对我来说,从C来到PHP很奇怪。为什么是向下投票?我认为这个问题很好,我们鼓励你们回答自己的问题。你可以提出一个带有答案的问题(尽管需要发布答案),作为知识共享的一种形式,作为很好的解释!但仅仅因为你能做一些事情并不意味着你应该做。使用未定义的变量是不好的做法。哦,你不需要检查rand调用的结果是否等于零。你可以简单地在rand之前加一个shebang:)