- ベストアンサー
unset使用時の利点
現在、PHPを勉強中なのですが unsetという標準関数がphpにはあります。 phpのマニュアルをみると 「unset ― 指定した変数の割当を解除する」と載っています。 つまりこれは、メモリ上からunsetの引数で指定した変数を開放してくれるという関数だと理解していいと思うのですが、つまりこの関数は、 一度使った後、ほとんど使われなくなる可能性ががある変数なんかがあった場合は、多用してもいいということなのでしょうか? 他にも利用したほうが良いケースや利点がある場合があるのか気になっています。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>存在していると処理に不都合が出る場合とはどんな場合があるのでしょうか? 今PHPを勉強中だそうですが、これからいろいろプログラムを作っていくうちに、きっとunsetを使う場面に遭遇するでしょう。 私はNo1でも回答しましたが、カート処理などで、カートの中身をセッションに配列として保存しておき、ユーザーが商品を削除したときに、その商品のIDを配列で検索して削除し、その配列から再度カートの中身を表示される、といった具合です。 説明がちょっとわかりずらいと思いますが、イメージとしてこんな感じです。 (1)例えばカートの中身はこんな具合になっているとします $_SESSION['CART']['No001']['商品名']="りんご"; $_SESSION['CART']['No001']['金額']="100"; $_SESSION['CART']['No001']['数量']="10"; $_SESSION['CART']['No002']['商品名']="みかん"; $_SESSION['CART']['No002']['金額']="50"; $_SESSION['CART']['No002']['数量']="5"; (2)No001の商品が削除されたとします $id=$_POST['del'];//POSTデータはNo001 unset($_SESSION['CART'][$id]); (3)再度カートの中身を表示 foreach($_SESSION['CART'] as $goods){ echo "商品名:".$goods['商品名']."<br>"; echo "金額:".$goods['金額']."円<br>"; echo "数量:".$goods['数量']."個<br>"; echo "小計:".$goods['金額']*$goods['数量']."円<br>"; } (4)出力結果は・・・ 商品名:みかん 金額:50円 数量:5個 小計:250円 となります。 あとは、絞り込み検索処理などでもよく使います。
その他の回答 (3)
- inu2
- ベストアンサー率33% (1229/3720)
必要なくなったとか、いらないから という意味で使うのではなく、有ると困るから という意味で使います。 と言っても、PHPの場合はガベージコレクタがアホなので、もしかしたら必要なくなった という意味で使った場合有効なのかもしれません :-p
お礼
回答ありがとうございます ≦(._.)≧ ちなみに、「有ると困るから」という場合とは どんな時なのでしょうか? もし、差し支えなければ教えていただけないでしょうか?
- maenet1972
- ベストアンサー率68% (26/38)
No1ですが、補足分です。 >ほとんど使われなくなる可能性ががある変数なんかがあった場合は、多用してもいいということなのでしょうか? つまり、unsetを使用するのは、その変数が今後使われないから削除するのではなく、存在していると処理に不都合が出る場合に使用します。 もちろん、多用することには全く問題はありません。
お礼
回答ありがとうございます m(。_。;))m ちなみに、存在していると処理に不都合が出る場合とは どんな場合があるのでしょうか? もし、差し支えなければ教えていただけないでしょうか?
- maenet1972
- ベストアンサー率68% (26/38)
unsetと変数初期化を区別して考えるといいでしょう。 $a="";とunset($a);は全く違います。 配列などで特定のキーと値を削除したい時には重宝します。 例えばこんな感じ、、、 <? $a[1]=1; $a[2]=2; $a[3]=3; $a[1]="";//変数初期化 echo count($a)."<br>";//答えは3 unset($a[1]);// echo count($a)."<br>";//答えは2 ?> 配列数を取得して処理させている仕組みの場合だと、 このような方法を使います。 unsetはセッション変数などにも有効なので、 カート処理(カートの商品削除の処理)でもよく使います。
お礼
丁寧に説明していただきありがとうございます。 なるほど。「存在していると処理に不具合がでる場合」という表現が よくわかりました。参考にさせていただきますね^^ ありがとうございました。 <(_ _)>