按上未設置()函數的PHP文件:爲什麼像unset()這樣的行爲在全局變量的情況下對其他操作也不一樣?
的未設置()函數的內部可根據您正試圖銷燬的變量的類型而異的行爲。 如果一個全局變量在函數內部是unset(),那麼只有局部變量被銷燬。調用環境中的變量將保持與調用unset()之前相同的值。
的代碼示例演示上面說的是如下:
<?php
function destroy_foo()
{
global $foo;
unset($foo);
}
$foo = 'bar';
destroy_foo();
echo $foo; // o/p is bar
?>
現在我的問題是,爲什麼上述行爲並不適用於以下我寫程序?
<?php
function increment_foo()
{
global $foo;
$foo++;
}
$foo = 36;
increment_foo();
echo $foo; // o/p is 37
?>
我的疑問是,爲什麼行爲是在上面的代碼比unset()
功能寫在代碼的行爲有什麼不同?
換句話說,我希望在第一代碼知道unset()
功能仍然僅限於函數內部的局部變量,它不會改變功能之外,但我一直在寫的代碼在全球範圍內的值增量功能也會更改全局變量作用域中的值。在我的代碼中,爲什麼它不會侷限於函數內部的局部變量,並且改變函數外部的變量值/影響變量?
謝謝。
似乎是一個範圍問題 – rtfm
這就是它是如何工作的以及它是如何記錄的。除此之外,我覺得這很合乎邏輯:它就像是對全局變量的引用,因此取消設置它,取消引用並修改它會更改全局變量。真正的問題是爲什麼你會使用全局變量;-) – jeroen