質問編集履歴

3

追記

2018/06/10 14:44

投稿

KazuhiroHatano
KazuhiroHatano

スコア7804

test CHANGED
File without changes
test CHANGED
@@ -119,3 +119,25 @@
119
119
  この動作はPHPのバージョンや設定などによらず
120
120
 
121
121
  保証される動作なのでしょうか?
122
+
123
+
124
+
125
+ ---
126
+
127
+
128
+
129
+ さらに追記
130
+
131
+
132
+
133
+ [unserialize](http://php.net/manual/ja/function.unserialize.php)のマニュアルにおいては未定義のクラスのunserializeが行われた場合はunserialize_callback_funcが定義されていた場合
134
+
135
+ それがコールされるという旨の記述がありました
136
+
137
+ php.iniの設定などによってはここでエラーや例外を返すこともあり得る
138
+
139
+ ということではありますが、果たしてここで例外を返したり
140
+
141
+ エラーにすることを標準としていて
142
+
143
+ なおかつ上書き不可能という可能性は考慮すべきか否か…

2

追記

2018/06/10 14:43

投稿

KazuhiroHatano
KazuhiroHatano

スコア7804

test CHANGED
File without changes
test CHANGED
@@ -23,3 +23,99 @@
23
23
  未定義のクラスのインスタンスがセッション内に存在するだけで
24
24
 
25
25
  エラーになる場合もあるのでしょうか?
26
+
27
+
28
+
29
+ ---
30
+
31
+
32
+
33
+ 追記
34
+
35
+
36
+
37
+ 試したコード
38
+
39
+
40
+
41
+ test1.php
42
+
43
+ ```php
44
+
45
+ class Test{
46
+
47
+ public $hoge;
48
+
49
+ public function __construct($str){
50
+
51
+ $this->hoge=$str;
52
+
53
+ }
54
+
55
+ }
56
+
57
+ session_start();
58
+
59
+ $_SESSION['testa']=new Test('a');
60
+
61
+ $testb=new Test('b');
62
+
63
+ file_put_contents('testb.txt',serialize($testb));
64
+
65
+ ```
66
+
67
+ test2.php
68
+
69
+ ```php
70
+
71
+ session_start();
72
+
73
+ var_dump($_SESSION['testa']);
74
+
75
+ var_dump(unserialize(file_get_contents('testb.txt')));
76
+
77
+
78
+
79
+ //object(__PHP_Incomplete_Class)#3 (2) {
80
+
81
+ // ["__PHP_Incomplete_Class_Name"]=>
82
+
83
+ // string(4) "Test"
84
+
85
+ // ["hoge"]=>
86
+
87
+ // string(1) "a"
88
+
89
+ //}
90
+
91
+ //object(__PHP_Incomplete_Class)#4 (2) {
92
+
93
+ // ["__PHP_Incomplete_Class_Name"]=>
94
+
95
+ // string(4) "Test"
96
+
97
+ // ["hoge"]=>
98
+
99
+ // string(1) "b"
100
+
101
+ //}
102
+
103
+
104
+
105
+ ```
106
+
107
+
108
+
109
+ セッションにおいても
110
+
111
+ あるいはファイルにシリアライズして保存したものについても
112
+
113
+ 500エラーなど出ることなく未定義のクラスは
114
+
115
+ __PHP_Incomplete_Classのオブジェクトとして処理されました
116
+
117
+
118
+
119
+ この動作はPHPのバージョンや設定などによらず
120
+
121
+ 保証される動作なのでしょうか?

1

修正

2018/06/10 13:12

投稿

KazuhiroHatano
KazuhiroHatano

スコア7804

test CHANGED
File without changes
test CHANGED
@@ -1,6 +1,6 @@
1
1
  $_SESSION内にクラスのインスタンスを入れてから
2
2
 
3
- クラス未定義のままsession_startしても
3
+ 別プロセスでそのインスタンスのクラス未定義のままsession_startしても
4
4
 
5
5
  __PHP_Incomplete_Classのオブジェクトとされ
6
6