if while中變數的作用域問題

2022-03-23 18:48:53 字數 1385 閱讀 4405

我們知道,函式、類會改變當前變數的作用域。if,while等分支迴圈結構會繼承外部作用域,即外部變數對分支迴圈結構內部可見。

但是c語言不支援if,while等分支迴圈結構內部作用域對外可見,而php則不然。

在php中,if,while等分支迴圈結構中宣告的區域性變數,在分支迴圈結構後面仍然有效。

比如,函式中宣告的變數在函式外面是不可見的

c語言:

#includeint foo()

int main()

報錯:scope.c: in function 『main』:

scope.c:11: 錯誤:『bar』 未宣告 (在此函式內第一次使用)

scope.c:11: 錯誤:(即使在乙個函式內多次出現,每個未宣告的識別符號在其

scope.c:11: 錯誤:所在的函式內只報告一次。)

php語言:

<?php

function foo()

echo $bar;

報錯:notice: undefined variable: bar in scope.php on line 7

php notice:  undefined variable: bar in scope.php on line 7

而if,while等迴圈分支結構會繼承外部作用域,即外部變數對迴圈分支結構內部可見

類似的:

c語言:

#includeint main()

while(1)

return 0;

}

輸出:php語言:

<?php

$foo = 1;

if(1)

while(1)

輸出:但是不一樣的地方來了。

c語言:

#includeint main()

printf("%d\n",bar);

while(1)

printf("%d\n",bar);

return 0;

}

報錯:scope.c: in function 『main』:

scope.c:12: 錯誤:『bar』 未宣告 (在此函式內第一次使用)

scope.c:12: 錯誤:(即使在乙個函式內多次出現,每個未宣告的識別符號在其

scope.c:12: 錯誤:所在的函式內只報告一次。)

php語言

<?php

$foo = 1;

if(1)

echo $bar,"\n";

while(1)

echo $bar2,"\n";

輸出:這就是需要注意的地方!

PHP中變數的作用域

在php指令碼中變數主要有 內建超級全域性變數,一般的變數,常量,全域性變數,靜態變數等等,我們在使用它們的時候除了要正確地知道它們的語法以外,更重要的是,我們要知道它們在本質上的區別與聯絡 即它們的作用域的問題。1.內建超級全域性變數可以在指令碼的任何地方使用和可見。即是說,如果我們在乙個php頁...

PHP中變數的作用域

1 超級變數 post,get,global,cookie,files,env,request,session 在指令碼的任何地方可以直接使用。2 常量,被宣告以後,可以供該宣告後的所有位置使用。如 function changename changename echo you are a gooo...

C 中變數的作用域

作用域 scope 是程式的一部分,在其中名字有其特定含義 c 語言中大多數作用域都以花括號分隔 注意 同乙個名字在不同的作用域中可能是指向的是不同的實體,實體的有效區域始於名字的宣告語句,以宣告語句所在的作用域末端結束 int main 如上面的程式的例子,main定義於所有花括號之外,所以是擁有...