3

について質問がありますunset

  1. すべての変数の設定を解除する方法。使用するunset($var1,$var2,$var3,...)必要がありますか、それとも他の簡単な方法がありますか?
  2. 関数の最後で変数の設定を解除するのは良い習慣ですか?違いはありません!
  3. 変数の設定を解除すると、reduceプログラミングされますexecution timeか?

ありがとう

4

3 に答える 3

4
  1. あなたunset($var1,$var2,$var3,...)にとって十分に簡単ではないということですか?

  2. ローカル変数は関数のスコープの最後で常に消えるので、明示的にそうする意味はありません。これは参照変数にも当てはまり、関数にローカルな参照のみが表示されなくなりますが、それらが参照するものはすべて、関数のスコープ外にある場合でも存在します。

  3. わからない。

于 2011-06-04T04:41:56.740 に答える
1

すべての変数の設定を解除する方法。unset($ var1、$ var2、$ var3、...)を使用する必要がありますか、それとも他の簡単な方法がありますか?

はい、これは複数の変数の設定を解除する通常の方法です。スコープ内の変数を繰り返して設定を解除することもできますが、それはやり過ぎです。

関数の最後で変数の設定を解除するのは良い習慣ですか?違いはありません!

変数はスコープの最後(関数、クラス、スクリプト)でガベージコレクションされますが、単一ファイルのスクリプト(手続き型)でこれを行うと便利な場合があります。特に、他のスクリプトがスコープに任意に含まれているスクリプトではそうです。

そうは言っても、クリーンな組織では、これは不要です。ただし、必ずしも悪いことでもありません。

変数の設定を解除すると、プログラミングの実行時間が短縮されますか?

ほとんどの場合、違いはほとんどありません。ただし、前述したように、それは害を及ぼすことはなく、範囲内/範囲外の内容を明確にする可能性があります。実際、for / foreachにはブロックスコープがないため、私は通常、for / foreachの直後にこれを行います。したがって、これらのブロック内で定義された変数は、ループの後で使用できます。

例:

foreach ($doctors as $key => $val) {
    // do something
}
unset($key, $val);

ところで、これを実際にまとめて行う方法を知りたい場合(はい、可能ですが、きれいではありません):

<?php

$_SCRIPT_one   = 1;
$_SCRIPT_two   = 2;
$_SCRIPT_three = 3;

// list of all variables defined
$all   = array_keys(get_defined_vars());

// list only the local variables we are interested in
$local = array_filter($all, function($name) { return preg_match('/^_SCRIPT_/i', $name); });

// dump currently scoped local variables
var_dump($local);


// unset local variables
foreach ($local as $var) { unset($$var); }


// list of all variables defined
$all   = array_keys(get_defined_vars());

// list only the local variables we are interested in
$local = array_filter($all, function($name) { return preg_match('/^_SCRIPT_/i', $name); });

// dump currently scoped local variables
var_dump($local);
于 2011-06-04T04:48:06.493 に答える
0

まず、unsetは言語構造であり、関数ではありません。

すべての変数の設定を解除する方法。unset($ var1、$ var2、$ var3、...)を使用する必要がありますか、それとも他の簡単な方法がありますか?

すべてのグローバル変数の設定を解除することはできますが、なぜそのようなことをするのかわかりません。

foreach (array_keys($GLOBALS) as $var) {
   if ($var != 'GLOBALS') unset($GLOBALS[$var]);
}

関数の最後で変数の設定を解除するのは良い習慣ですか?違いはありません!

いいえ、変数がスコープ外になると、変数は自動的に設定解除されます。手動で行う意味はありません。

変数の設定を解除すると、プログラミングの実行時間が短縮されますか?

実際には、メモリ使用量を減らす可能性があります

于 2011-06-04T04:45:42.087 に答える