xref: /PHP-7.4/ext/spl/tests/observer_005.phpt (revision 782352c5)
1--TEST--
2SPL: SplObjectStorage serialization & visibility
3--FILE--
4<?php
5
6class TestClass
7{
8	public    $def = 24;
9	public    $pub = 25;
10	protected $pro = 26;
11	private   $pri = 27;
12
13	public function __construct($pub = 42, $pro = 43, $pri = 44)
14	{
15		$this->pub = $pub;
16		$this->pro = $pro;
17		$this->pri = $pri;
18	}
19}
20
21class ExtTestClass
22{
23}
24
25class MyStorage extends SplObjectStorage
26{
27	public    $def = 24;
28	public    $pub = 25;
29	protected $pro = 26;
30	private   $pri = 27;
31
32	public function __construct($pub = 52, $pro = 53, $pri = 54)
33	{
34		$this->pub = $pub;
35		$this->pro = $pro;
36		$this->pri = $pri;
37	}
38}
39
40class ExtStorage extends MyStorage
41{
42}
43
44$storage = new MyStorage(1,2,3);
45
46foreach(array(array(4,5,6),array(7,8,9)) as $value)
47{
48     $storage->attach(new TestClass($value[0], $value[1], $value[2]));
49}
50
51var_dump(count($storage));
52
53foreach($storage as $object)
54{
55	var_dump($object);
56}
57
58var_dump($storage);
59
60var_dump(serialize($storage));
61echo "===UNSERIALIZE===\n";
62
63$storage2 = unserialize(serialize($storage));
64
65var_dump(count($storage2));
66
67foreach($storage2 as $object)
68{
69	var_dump($object);
70}
71
72var_dump($storage2);
73
74?>
75===DONE===
76<?php exit(0); ?>
77--EXPECTF--
78int(2)
79object(TestClass)#%d (4) {
80  ["def"]=>
81  int(24)
82  ["pub"]=>
83  int(4)
84  ["pro":protected]=>
85  int(5)
86  ["pri":"TestClass":private]=>
87  int(6)
88}
89object(TestClass)#%d (4) {
90  ["def"]=>
91  int(24)
92  ["pub"]=>
93  int(7)
94  ["pro":protected]=>
95  int(8)
96  ["pri":"TestClass":private]=>
97  int(9)
98}
99object(MyStorage)#%d (5) {
100  ["def"]=>
101  int(24)
102  ["pub"]=>
103  int(1)
104  ["pro":protected]=>
105  int(2)
106  ["pri":"MyStorage":private]=>
107  int(3)
108  ["storage":"SplObjectStorage":private]=>
109  array(2) {
110    ["%s"]=>
111    array(2) {
112      ["obj"]=>
113      object(TestClass)#%d (4) {
114        ["def"]=>
115        int(24)
116        ["pub"]=>
117        int(4)
118        ["pro":protected]=>
119        int(5)
120        ["pri":"TestClass":private]=>
121        int(6)
122      }
123      ["inf"]=>
124      NULL
125    }
126    ["%s"]=>
127    array(2) {
128      ["obj"]=>
129      object(TestClass)#%d (4) {
130        ["def"]=>
131        int(24)
132        ["pub"]=>
133        int(7)
134        ["pro":protected]=>
135        int(8)
136        ["pri":"TestClass":private]=>
137        int(9)
138      }
139      ["inf"]=>
140      NULL
141    }
142  }
143}
144string(%d) "%s"
145===UNSERIALIZE===
146int(2)
147object(TestClass)#%d (4) {
148  ["def"]=>
149  int(24)
150  ["pub"]=>
151  int(4)
152  ["pro":protected]=>
153  int(5)
154  ["pri":"TestClass":private]=>
155  int(6)
156}
157object(TestClass)#%d (4) {
158  ["def"]=>
159  int(24)
160  ["pub"]=>
161  int(7)
162  ["pro":protected]=>
163  int(8)
164  ["pri":"TestClass":private]=>
165  int(9)
166}
167object(MyStorage)#%d (5) {
168  ["def"]=>
169  int(24)
170  ["pub"]=>
171  int(1)
172  ["pro":protected]=>
173  int(2)
174  ["pri":"MyStorage":private]=>
175  int(3)
176  ["storage":"SplObjectStorage":private]=>
177  array(2) {
178    ["%s"]=>
179    array(2) {
180      ["obj"]=>
181      object(TestClass)#%d (4) {
182        ["def"]=>
183        int(24)
184        ["pub"]=>
185        int(4)
186        ["pro":protected]=>
187        int(5)
188        ["pri":"TestClass":private]=>
189        int(6)
190      }
191      ["inf"]=>
192      NULL
193    }
194    ["%s"]=>
195    array(2) {
196      ["obj"]=>
197      object(TestClass)#%d (4) {
198        ["def"]=>
199        int(24)
200        ["pub"]=>
201        int(7)
202        ["pro":protected]=>
203        int(8)
204        ["pri":"TestClass":private]=>
205        int(9)
206      }
207      ["inf"]=>
208      NULL
209    }
210  }
211}
212===DONE===
213