$_SESSION内にクラスのインスタンスを入れてから
別プロセスでそのインスタンスのクラスを未定義のままsession_startしても
__PHP_Incomplete_Classのオブジェクトとされ
エラーになりませんでした
また、そのインスタンスを操作しようとしない限りは
メッセージも出されませんでした
この動作は普遍でしょうか?
あるいはPHPのバージョンやphp.iniの設定などにより
未定義のクラスのインスタンスがセッション内に存在するだけで
エラーになる場合もあるのでしょうか?
追記
試したコード
test1.php
php
1class Test{ 2 public $hoge; 3 public function __construct($str){ 4 $this->hoge=$str; 5 } 6} 7session_start(); 8$_SESSION['testa']=new Test('a'); 9$testb=new Test('b'); 10file_put_contents('testb.txt',serialize($testb));
test2.php
php
1session_start(); 2var_dump($_SESSION['testa']); 3var_dump(unserialize(file_get_contents('testb.txt'))); 4 5//object(__PHP_Incomplete_Class)#3 (2) { 6// ["__PHP_Incomplete_Class_Name"]=> 7// string(4) "Test" 8// ["hoge"]=> 9// string(1) "a" 10//} 11//object(__PHP_Incomplete_Class)#4 (2) { 12// ["__PHP_Incomplete_Class_Name"]=> 13// string(4) "Test" 14// ["hoge"]=> 15// string(1) "b" 16//} 17
セッションにおいても
あるいはファイルにシリアライズして保存したものについても
500エラーなど出ることなく未定義のクラスは
__PHP_Incomplete_Classのオブジェクトとして処理されました
この動作はPHPのバージョンや設定などによらず
保証される動作なのでしょうか?
さらに追記
unserializeのマニュアルにおいては未定義のクラスのunserializeが行われた場合はunserialize_callback_funcが定義されていた場合
それがコールされるという旨の記述がありました
php.iniの設定などによってはここでエラーや例外を返すこともあり得る
ということではありますが、果たしてここで例外を返したり
エラーにすることを標準としていて
なおかつ上書き不可能という可能性は考慮すべきか否か…
あなたの回答
tips
プレビュー