簡體   English   中英

PHP和C之間的可變范圍差異:塊范圍不完全相同?

[英]Variable scope difference between PHP and C: block scope is not exactly the same?

以下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設置為包含通知,則嘗試使用尚未定義的變量 ,它將在運行時發出E_NOTICE錯誤。 所以如果你有:

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

代碼運行正常,但是一些執行將回顯'3'(當if成功時),並且一些將引發E_NOTICE並且什么都不回顯,因為$i將不在echo語句的范圍內定義。

在函數之外,永遠不會定義$i (因為函數具有不同的范圍)。

欲了解更多信息: http//php.net/manual/en/language.variables.scope.php

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM