web-dev-qa-db-ja.com

PHPスクリプトのすべての変数の設定を解除します

スクリプト内のすべての変数を自動的に設定解除しようとしています。

この方法を試しました:

  echo '<br /> Variables in Script before unset(): <br />';
  print_r(array_keys(get_defined_vars()));
  echo '<br /><br />';
  var_dump(get_defined_vars());

  // Creates string of comma-separated variables(*) for unset.
  $all_vars = implode(', $', array_keys(get_defined_vars()));

  echo '<br /><br />';
  echo '<br />List Variables in Script: <br />';
  echo $all_vars;
  unset($all_vars);

  echo '<br /><br />';
  echo '<br />Variables in Script after unset(): <br />';
  print_r(array_keys(get_defined_vars()));
  echo '<br />';
  var_dump(get_defined_vars());

なぜ機能しないのですか?

これを行うためのより良い方法はありますか?

助けてくれてありがとう!

(*) It's seems somewhat that it does not really create the variables, but a string that looks like variables...

12
Ash501

ここに行く->

$vars = array_keys(get_defined_vars());
for ($i = 0; $i < sizeOf($vars); $i++) {
    unset($$vars[$i]);
}
unset($vars,$i);

また、明確にするために、implodeは「すべての配列要素の同じ順序の文字列表現」を返します。 http://php.net/manual/en/function.implode.php

Unsetでは、文字列表現だけでなく、実際の変数をパラメーターとして必要とします。これは、get_defined_vars()が返すものと似ています(実際の変数参照ではありません)。したがって、コードは文字列の配列を調べ、unsetが使用できる追加の$を前に使用してそれぞれを参照として返します。

14
airtech

foreach (array_keys($GLOBALS) as $k) unset($$k); unset($k);

3
ferhad

皆さんのことはわかりませんが、$$ varsは私には機能しません。

それが私がやった方法です。

$vars = array_keys(get_defined_vars());
foreach($vars as $var) {
    unset(${"$var"});
}
3
Leo Leoncio

PHP 7.0インスタンスで@airtechの回答を実行できませんでした。配列から文字列への変換エラーがスローされます。

彼のソリューションのこの更新/簡略化されたバージョンは私のために機能します(より明確にするために中括弧「{}」も追加しました):

foreach(array_keys(get_defined_vars()) as $strVarName){
  unset(${$strVarName});
}

元の質問に答えるために、他の人が述べたように、implodeは変数のように見える文字列を作成するだけですが、PHPではそのように解釈されません。

この問題を解決するコードは、PHPの「変数変数」の概念を利用しています。この概念の詳細はこちら: https://www.php.net/manual/en/language.variables.variable.php

0
pycvalade