下面是在function裡修改全域變數值的例子:
function ff() { global $v; $v = 2; } $v=1; ff(); var_dump($v);這個例子會輸出 int(2)
但在function裡unset全域變數:
function ff() { global $v; unset($v); } $v=1; ff(); var_dump($v);這個例子會輸出 int(1)
因為用此寫法,只有在function裡面的區域變數會被銷毀,全域變數則不會被銷毀。
若須在function內真正銷毀全域變數,須使用$GLOBALS,如下
function ff() { unset($GLOBALS["v"]); } $v=1; ff(); var_dump($v);這個例子會輸出 NULL
表示全域變數被unset了
在function裡修改全域變數的值,再unset全域變數:
function ff() { global $v; $v = 2; unset($v); } $v=1; ff(); var_dump($v);這個例子會輸出 int(2)
再來看看function裡static變數的情形:
function ff() { static $v = 0; $v++; var_dump($v); } ff(); ff(); ff();這個例子會輸出
int(1)
int(2)
int(3)
在function裡unset static變數的情形:
function ff() { static $v = 0; $v++; var_dump($v); unset($v); var_dump($v); } ff(); ff(); ff();這個例子會輸出
int(1)
NULL
NULL
NULL
表示在function裡unset靜態變數後,在之後的程式碼生效了,所以都輸出 NULL,但效果僅在這一次,再跑下一次時,原先的靜態變數的值,又回復了,好像沒用過unset一樣。
function使用傳遞參考(reference)的情形:
function ff(&$v) { $v=2; } $v=1; ff($v); var_dump($v);這個例子會輸出
int(2)
function使用傳遞參考(reference)然後unset變數的情形:
function ff(&$v) { unset($v); var_dump($v); } $v=1; ff($v); var_dump($v);這個例子會先輸出
NULL
再輸出int(1)
表示傳參考給function,然後在function內unset該變數,效果也是只有在function內。
沒有留言:
張貼留言