Следующий код 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 имеет только область действия - управляющие структуры, такие как , если
не вводят новую область действия. Однако это также не имеет значения, если вы используете переменные, которые не объявили. $ i
не будет существовать вне main ()
или в случае сбоя оператора if, но вы все равно можете свободно повторить его.
Если вы настроили PHP error_reporting на включение уведомлений, он выдаст ошибку E_NOTICE
во время выполнения , если вы попытаетесь использовать переменную, которая не была определена. Итак, если бы у вас было:
function main() {
if (rand(0,1) == 0) {
$i = 3;
}
echo $i;
}
, код работал бы нормально, но некоторые исполнения будут отображать эхо «3» (когда , если
завершится успешно), а некоторые вызовут E_NOTICE
и ничего не отобразят , поскольку $ i
не будет определен в области действия оператора echo.
Вне функции $ i
никогда не будет определен (потому что функция имеет другую область видимости).
Для получения дополнительной информации: http://php.net/manual/en/language.variables.scope.php