Переменное различие в объеме между 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 переменные, определенные во внутреннем блоке, могут использоваться во внешнем блоке?

37
задан powerboy 24 May 2010 в 00:27
поделиться

1 ответ

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

54
ответ дан 27 November 2019 в 04:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: