home ホーム search 検索 -  login ログイン  | reload edit datainfo version cmd icon diff delete  | help ヘルプ

PHP/Tips/20051016/外部定義された変数を関数内でunset()するときの罠

PHP/Tips/20051016/外部定義された変数を関数内でunset()するときの罠

PHP / Tips / 20051016 / 外部定義された変数を関数内でunset()するときの罠
id: 60 所有者: msakamoto-sf    作成日: 2005-10-16 23:35:43
カテゴリ: 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()には気をつけましょう。



プレーンテキスト形式でダウンロード
現在のバージョン : 1
更新者: msakamoto-sf
更新日: 2008-12-22 23:37:21
md5:69a2a771d9ec129014d08589719d9366
sha1:a44c820d66702ef079d37f2e2f61f0f77ee9b774
コメント
コメントを投稿するにはログインして下さい。