次の状況を考慮してください。
$var = 'Lots of information';
function go($var) {
// Do stuff
}
ここで、PHPが関数を終了すると、関数内のすべてのローカル変数のメモリが自動的にクリアされますか、それとも次のようにする必要がありますか。
unset($var);
...大量のデータを格納するローカル変数の関数内?
次の状況を考慮してください。
$var = 'Lots of information';
function go($var) {
// Do stuff
}
ここで、PHPが関数を終了すると、関数内のすべてのローカル変数のメモリが自動的にクリアされますか、それとも次のようにする必要がありますか。
unset($var);
...大量のデータを格納するローカル変数の関数内?
関数スコープ内でそれ自体をクリアします。これは$var
、関数呼び出し後に関数のパラメーターが存在しなくなることを意味します。$var = 'Lots of information';
したがって、機能ブロックの外側にあることは自動的にクリアされないことに注意してください。この場合$var
、グローバルスコープと$var
関数スコープには2つの異なるものがあり、関数ブロック内$var
には関数スコープ内にのみ存在します。
この質問は、可変スコープの概念に行きます。関数内では、変数は「含まれている」ものであり、グローバルとして宣言されていない限り、関数外で同じ名前の変数に関連付けられることはありません。したがって、関数内に大きな変数を作成し、それをunset()したい場合は、関数内でunset()する必要があります。このページは、特に「グローバル」変数と「静的」変数に関する部分で重要です。PHPには、変数名の前にアンパサンドを使用して参照によって変数を渡す方法もあります。その場合、関数は変数のコピーではなく、変数自体を操作します。 http://php.net/manual/en/language.variables.scope.php