PHP和C之间的变量范围差异:块范围不完全相同?
下面的PHP代码将输出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只有函数作用域-控制结构,例如如果不
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:)