Разница в области переменных между областью PHP и C: не совсем то же самое?

Следующий PHP-код выведет 3 .

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

Но следующий код C вызовет ошибку компиляции.

 void main() { if (1) { int i = 3; } printf("%d", i); } 

Итак, переменные в PHP не являются строго блочными? В PHP переменные, определенные во внутреннем блоке, могут использоваться во внешнем блоке?

Related of "Разница в области переменных между областью PHP и C: не совсем то же самое?"

PHP имеет только функцию scope – управляющие структуры, например, if не ввести новую область. Однако он также не против, если вы используете переменные, которые вы еще не объявили. $i не будет существовать вне main() или если оператор if терпит неудачу, но вы все равно можете свободно его откликнуться.

Если у вас установлен параметр error_reporting PHP для включения уведомлений, он будет E_NOTICE ошибку E_NOTICE во время выполнения, если вы попытаетесь использовать переменную, которая не была определена. Так что если бы у вас было:

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

Код будет работать нормально, но некоторые исполнения будут эхом «3» (когда это if успешно), а некоторые E_NOTICE и ничего не E_NOTICE , так как $i не будет определяться в объеме эхо-инструкции.

Вне функции $i никогда не будет определяться (потому что функция имеет разную область).

Для получения дополнительной информации: http://php.net/manual/en/language.variables.scope.php