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?
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 ofmain()
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:The code would run fine, but some executions will echo '3' (when the
if
succeeds), and some will raise anE_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