Следующий 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