#navi_header|PHP| PHP使い始めて4年以上。今日、初めてこの罠をしった・・・。 http://jp.php.net/manual/ja/function.unset.php にありますが、関数内で、その関数の外で定義した変数をunset()しても、unset()されてるのは関数の中だけで、関数の外では以前と同じ値が保持されるんですわ。 例えば外で定義されてる$_BOHEという変数をunset()する関数で、以下のどれが正解かというと・・・ function __UNSET1() { global $_BOHE; unset($_BOHE); } function __UNSET2(&$val) { // ex) __UNSET2($_BOHE); unset($val); } function __UNSET3($var_name) { // ex) __UNSET3('_BOHE'); global $$var_name; unset($$var_name); } function __UNSET4($var_name) { // ex) __UNSET4('_BOHE'); unset($GLOBALS[$var_name]); } '' $GLOBALSでとってる__UNSET4()だけが正解。 '' これは実際に実験して確認しました。 ただ、変数を直接unset()するのは確かに$GLOBALSでなきゃだめなんですが、私自身は今までちょくちょく function hogehoge() { ... global $_HOGE unset($_HOGE['key']); } とか大量に書いてきて、それでちゃんと動いてました。 つまり、変数を直接unsetするのはN.G.なんですが、変数が配列の時、そのキー値をunsetするのは平気みたいです。 とりあえず以上です。unset()には気をつけましょう。 #navi_footer|PHP|