Variable scope difference between PHP and C: block scope is not exactly the same?

人走茶凉 提交于 2019-12-30 00:46:31

问题


The following PHP code will output 3.

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

main();

But the following C code will raise a compile error.

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

    printf("%d", i);
}

So variables in PHP are not strictly block-scoped? In PHP, variables defined in inner block can be used in outer block?


回答1:


PHP only has function scope - control structures such as if don't introduce a new scope. However, it also doesn't mind if you use variables you haven't declared. $i won't exist outside of main() or if the if statement fails, but you can still freely echo it.

If you have PHP's error_reporting set to include notices, it will emit an E_NOTICE error at runtime if you try to use a variable which hasn't been defined. So if you had:

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

The code would run fine, but some executions will echo '3' (when the if succeeds), and some will raise an E_NOTICE and echo nothing, as $i won't be defined in the scope of the echo statement.

Outside of the function, $i will never be defined (because the function has a different scope).

For more info: http://php.net/manual/en/language.variables.scope.php



来源:https://stackoverflow.com/questions/2894087/variable-scope-difference-between-php-and-c-block-scope-is-not-exactly-the-same

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!