Подтвердить что ты не робот

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

4b9b3361

Ответ 1

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

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

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

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

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

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