__PHP_Incomplete_Class
unserialize()関数でオブジェクトのシリアライズに失敗したときに生成されるクラス名
http://php.net/manual/ja/language.oop5.serialization.php
code:php
>> $f = unserialize('O:3:"Foo":1:{s:4:"hoge";s:4:"piyo";}');
=> Foo {#2847
+"hoge": "piyo",
}
>> $g = unserialize('O:3:"Goo":1:{s:4:"hoge";s:4:"piyo";}');
=> __PHP_Incomplete_Class(Goo) {#2842
+hoge: "piyo",
}
Foo クラスは存在するので$fに復元されるが、Gooクラスが存在しないと__PHP_Incomplete_Classに化ける
シリアライズされたオブジェクトの名前空間やクラス名を変更したりすると起こる
このときにプロパティhogeにアクセスするとE_NOTICEが発生する
@ エラー制御演算子でも抑制することはできない (必ずnullが返る)
ReflectionProperty経由でも正確な値を取得することはできない
上記問題を避ける方法はシンプルで、(array)$gでキャストすることで中身を取り出すことができる
通常はそんなことはせず、unserialize()後に__PHP_Incomplete_Classが出たらさっさとエラーハンドリングすべき