[PHP-users 4279] PHP4.1.0でセッション変数をunsetした場合
Eita Morikawa
php-users@php.gr.jp
Fri, 14 Dec 2001 00:51:35 +0900
森川と申します。
セッション変数をunsetした場合の挙動が少なくともPHP4.0.6(及び4.0.5)と
PHP4.1.0で違うのですが、PHP4.1.0での挙動がどうも納得いかないので
質問させてください。
現象としては、session_registerした配列変数をunsetして、値をセットし
なおした場合、PHP4.0.6では、セッション回復時に、セットしなおした値に
なるが、PHP4.1.0では、配列そのものは回復してくれるものの、配列の
中身は空になる、というものです。
文章だとわかりづらいと思うので、switch-case風にコードを書きます。
case 1:
$a = array();
session_register(a);
unset($a);
$a = array("key2" => "value2");
case 2:
$a = array("key1" => "value1");
session_register(a);
unset($a);
$a = array("key2" => "value2");
case 3:
$a = array();
session_register(a);
unset($a);
$a = array("key2" => "value2");
$_SESSION['a'] = array("key3" => "value3");
case 4:
$a = array("key1" => "value1");
session_register(a);
unset($a);
$a = array("key2" => "value2");
$_SESSION['a'] = array("key3" => "value3");
PHP4.1.0と手元にあったPHP4.0.5で確認を行いましたが、
セッション回復後の配列$aのkeyは次のようになります。
4.0.5 4.1.0
case1 key2 空
case2 key2 key1
case3 (key2) key3
case4 (key2) key3
case3,case4は$_SESSIONも使ってみたので、PHP4.0.5
での実行結果は意味がないかもしれませんが、PHP4.1.0での
結果はどれも、自分のイメージとは違います。あるべき姿は
case1 key2
case2 key2
case3 key2,key3
case4 key2,key3
のように思っていますが、考え違いしていますでしょうか?
#尚、unset($a) を $a=array(); に書き換えると、PHP4.1.0でも
#case1とcase2についてはkey2となりました。
#さしあたりは、このようにコードを書き換えるつもりでいます。