[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となりました。
#さしあたりは、このようにコードを書き換えるつもりでいます。