observer_005.phpt 3.3 KB

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