Следующий 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 имеет только функцию 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