:(未設定のグローバル変数の場合のunset()のような動作が他の操作でも同じではないのはなぜですか?未設定()関数のPHPのドキュメントを1として
行動)は、関数の内部では、破棄しようとする変数の種類によって異なります。 グローバル化された変数が関数内でunset()されている場合、ローカル変数のみが破棄されます。呼び出し環境の変数は、unset()が呼び出される前と同じ値を保持します。ことわざの上実証
のコード例は以下の通りです:
<?php
function destroy_foo()
{
global $foo;
unset($foo);
}
$foo = 'bar';
destroy_foo();
echo $foo; // o/p is bar
?>
上記の行動は、私が書いたプログラムを以下では適用されない理由を今私の質問はありますか?動作がunset()
機能のために書かれたコードでの動作よりも上記のコードでは異なっている理由
<?php
function increment_foo()
{
global $foo;
$foo++;
}
$foo = 36;
increment_foo();
echo $foo; // o/p is 37
?>
私の疑いがありますか?
つまり、最初のコードでunset()
の機能が関数内のローカル変数に限定されていることを知りたいのですが、関数外のグローバルスコープの値は変更されませんが、増分機能によって、グローバル変数スコープ内の値も変更されます。なぜ私のコードでは、関数内のローカル変数と値の変更に制限されず、関数外の変数にも影響しますか?
ありがとうございます。
はスコープの問題のようです – rtfm
それはどのように動作し、どのように文書化されているかです。それを除いて、それは私にとってかなり論理的なようです:グローバル変数への参照のようなので、それを解除し、参照を解除し、グローバル変数を変更します。本当の疑問はなぜあなたがグローバル変数を使用するかということです;-) – jeroen