Variable scope difference between PHP and C: block scope is not exactly the same?
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