programing

PHP와 C의 가변 스코프 차이: 블록 스코프가 완전히 같지는 않습니까?

newsource 2023. 9. 27. 17:59

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에서 내부 블록에 정의된 변수는 외부 블록에 사용할 수 있습니까?

PHP는 다음과 같은 기능 범위 - 제어 구조만을 가지고 있습니다.if새로운 범위를 도입하지 마십시오.그러나 선언하지 않은 변수를 사용해도 상관이 없습니다.$i밖에서는 존재하지 않을 것입니다main()또는 if 진술이 실패하더라도 자유롭게 반향할 수 있습니다.

만약 당신이 PHP의 error_reporting이 notice를 포함하도록 설정되어 있다면, 그것은 방출될 것입니다.E_NOTICE정의되지 않은 변수를 사용하려고 하면 런타임에 오류가 발생합니다.그렇다면 다음과 같습니다.

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

코드는 정상적으로 실행되지만, 일부 실행은 '3'을 울립니다(다음 경우).ifsuccess), 그리고 일부는 이를 제기할 것입니다.E_NOTICE그리고 메아리치는 것은 아무것도 없습니다.$i에코 문의 범위에는 정의되지 않습니다.

그 기능 외에는,$i함수의 범위가 다르기 때문에 절대로 정의되지 않습니다.

자세한 정보: http://php.net/manual/en/language.variables.scope.php

언급URL : https://stackoverflow.com/questions/2894087/variable-scope-difference-between-php-and-c-block-scope-is-not-exactly-the-same