serialization_objects_015.phpt 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334
  1. --TEST--
  2. Object serialization / unserialization: properties reference containing object
  3. --FILE--
  4. <?php
  5. function check(&$obj) {
  6. var_dump($obj);
  7. $ser = serialize($obj);
  8. var_dump($ser);
  9. $uobj = unserialize($ser);
  10. var_dump($uobj);
  11. $uobj->a = "obj->a.changed";
  12. var_dump($uobj);
  13. $uobj->b = "obj->b.changed";
  14. var_dump($uobj);
  15. $uobj->c = "obj->c.changed";
  16. var_dump($uobj);
  17. }
  18. echo "\n\n--- a refs container:\n";
  19. $ext = 1;
  20. $obj = new stdClass;
  21. $obj->a = &$obj;
  22. $obj->b = 1;
  23. $obj->c = 1;
  24. check($obj);
  25. echo "\n\n--- a eqs container:\n";
  26. $ext = 1;
  27. $obj = new stdClass;
  28. $obj->a = $obj;
  29. $obj->b = 1;
  30. $obj->c = 1;
  31. check($obj);
  32. echo "\n\n--- a,b ref container:\n";
  33. $ext = 1;
  34. $obj = new stdClass;
  35. $obj->a = &$obj;
  36. $obj->b = &$obj;
  37. $obj->c = 1;
  38. check($obj);
  39. echo "\n\n--- a,b eq container:\n";
  40. $ext = 1;
  41. $obj = new stdClass;
  42. $obj->a = $obj;
  43. $obj->b = $obj;
  44. $obj->c = 1;
  45. check($obj);
  46. echo "\n\n--- a,b,c ref container:\n";
  47. $ext = 1;
  48. $obj = new stdClass;
  49. $obj->a = &$obj;
  50. $obj->b = &$obj;
  51. $obj->c = &$obj;
  52. check($obj);
  53. echo "\n\n--- a,b,c eq container:\n";
  54. $ext = 1;
  55. $obj = new stdClass;
  56. $obj->a = $obj;
  57. $obj->b = $obj;
  58. $obj->c = $obj;
  59. check($obj);
  60. echo "Done";
  61. ?>
  62. --EXPECTF--
  63. --- a refs container:
  64. object(stdClass)#%d (3) {
  65. ["a"]=>
  66. *RECURSION*
  67. ["b"]=>
  68. int(1)
  69. ["c"]=>
  70. int(1)
  71. }
  72. string(55) "O:8:"stdClass":3:{s:1:"a";R:1;s:1:"b";i:1;s:1:"c";i:1;}"
  73. object(stdClass)#%d (3) {
  74. ["a"]=>
  75. *RECURSION*
  76. ["b"]=>
  77. int(1)
  78. ["c"]=>
  79. int(1)
  80. }
  81. object(stdClass)#%d (3) {
  82. ["a"]=>
  83. string(14) "obj->a.changed"
  84. ["b"]=>
  85. int(1)
  86. ["c"]=>
  87. int(1)
  88. }
  89. object(stdClass)#%d (3) {
  90. ["a"]=>
  91. string(14) "obj->a.changed"
  92. ["b"]=>
  93. string(14) "obj->b.changed"
  94. ["c"]=>
  95. int(1)
  96. }
  97. object(stdClass)#%d (3) {
  98. ["a"]=>
  99. string(14) "obj->a.changed"
  100. ["b"]=>
  101. string(14) "obj->b.changed"
  102. ["c"]=>
  103. string(14) "obj->c.changed"
  104. }
  105. --- a eqs container:
  106. object(stdClass)#%d (3) {
  107. ["a"]=>
  108. *RECURSION*
  109. ["b"]=>
  110. int(1)
  111. ["c"]=>
  112. int(1)
  113. }
  114. string(55) "O:8:"stdClass":3:{s:1:"a";r:1;s:1:"b";i:1;s:1:"c";i:1;}"
  115. object(stdClass)#%d (3) {
  116. ["a"]=>
  117. *RECURSION*
  118. ["b"]=>
  119. int(1)
  120. ["c"]=>
  121. int(1)
  122. }
  123. object(stdClass)#%d (3) {
  124. ["a"]=>
  125. string(14) "obj->a.changed"
  126. ["b"]=>
  127. int(1)
  128. ["c"]=>
  129. int(1)
  130. }
  131. object(stdClass)#%d (3) {
  132. ["a"]=>
  133. string(14) "obj->a.changed"
  134. ["b"]=>
  135. string(14) "obj->b.changed"
  136. ["c"]=>
  137. int(1)
  138. }
  139. object(stdClass)#%d (3) {
  140. ["a"]=>
  141. string(14) "obj->a.changed"
  142. ["b"]=>
  143. string(14) "obj->b.changed"
  144. ["c"]=>
  145. string(14) "obj->c.changed"
  146. }
  147. --- a,b ref container:
  148. object(stdClass)#%d (3) {
  149. ["a"]=>
  150. *RECURSION*
  151. ["b"]=>
  152. *RECURSION*
  153. ["c"]=>
  154. int(1)
  155. }
  156. string(55) "O:8:"stdClass":3:{s:1:"a";R:1;s:1:"b";R:1;s:1:"c";i:1;}"
  157. object(stdClass)#%d (3) {
  158. ["a"]=>
  159. *RECURSION*
  160. ["b"]=>
  161. *RECURSION*
  162. ["c"]=>
  163. int(1)
  164. }
  165. object(stdClass)#%d (3) {
  166. ["a"]=>
  167. &string(14) "obj->a.changed"
  168. ["b"]=>
  169. &string(14) "obj->a.changed"
  170. ["c"]=>
  171. int(1)
  172. }
  173. object(stdClass)#%d (3) {
  174. ["a"]=>
  175. &string(14) "obj->b.changed"
  176. ["b"]=>
  177. &string(14) "obj->b.changed"
  178. ["c"]=>
  179. int(1)
  180. }
  181. object(stdClass)#%d (3) {
  182. ["a"]=>
  183. &string(14) "obj->b.changed"
  184. ["b"]=>
  185. &string(14) "obj->b.changed"
  186. ["c"]=>
  187. string(14) "obj->c.changed"
  188. }
  189. --- a,b eq container:
  190. object(stdClass)#%d (3) {
  191. ["a"]=>
  192. *RECURSION*
  193. ["b"]=>
  194. *RECURSION*
  195. ["c"]=>
  196. int(1)
  197. }
  198. string(55) "O:8:"stdClass":3:{s:1:"a";r:1;s:1:"b";r:1;s:1:"c";i:1;}"
  199. object(stdClass)#%d (3) {
  200. ["a"]=>
  201. *RECURSION*
  202. ["b"]=>
  203. *RECURSION*
  204. ["c"]=>
  205. int(1)
  206. }
  207. object(stdClass)#%d (3) {
  208. ["a"]=>
  209. string(14) "obj->a.changed"
  210. ["b"]=>
  211. *RECURSION*
  212. ["c"]=>
  213. int(1)
  214. }
  215. object(stdClass)#%d (3) {
  216. ["a"]=>
  217. string(14) "obj->a.changed"
  218. ["b"]=>
  219. string(14) "obj->b.changed"
  220. ["c"]=>
  221. int(1)
  222. }
  223. object(stdClass)#%d (3) {
  224. ["a"]=>
  225. string(14) "obj->a.changed"
  226. ["b"]=>
  227. string(14) "obj->b.changed"
  228. ["c"]=>
  229. string(14) "obj->c.changed"
  230. }
  231. --- a,b,c ref container:
  232. object(stdClass)#%d (3) {
  233. ["a"]=>
  234. *RECURSION*
  235. ["b"]=>
  236. *RECURSION*
  237. ["c"]=>
  238. *RECURSION*
  239. }
  240. string(55) "O:8:"stdClass":3:{s:1:"a";R:1;s:1:"b";R:1;s:1:"c";R:1;}"
  241. object(stdClass)#%d (3) {
  242. ["a"]=>
  243. *RECURSION*
  244. ["b"]=>
  245. *RECURSION*
  246. ["c"]=>
  247. *RECURSION*
  248. }
  249. object(stdClass)#%d (3) {
  250. ["a"]=>
  251. &string(14) "obj->a.changed"
  252. ["b"]=>
  253. &string(14) "obj->a.changed"
  254. ["c"]=>
  255. &string(14) "obj->a.changed"
  256. }
  257. object(stdClass)#%d (3) {
  258. ["a"]=>
  259. &string(14) "obj->b.changed"
  260. ["b"]=>
  261. &string(14) "obj->b.changed"
  262. ["c"]=>
  263. &string(14) "obj->b.changed"
  264. }
  265. object(stdClass)#%d (3) {
  266. ["a"]=>
  267. &string(14) "obj->c.changed"
  268. ["b"]=>
  269. &string(14) "obj->c.changed"
  270. ["c"]=>
  271. &string(14) "obj->c.changed"
  272. }
  273. --- a,b,c eq container:
  274. object(stdClass)#%d (3) {
  275. ["a"]=>
  276. *RECURSION*
  277. ["b"]=>
  278. *RECURSION*
  279. ["c"]=>
  280. *RECURSION*
  281. }
  282. string(55) "O:8:"stdClass":3:{s:1:"a";r:1;s:1:"b";r:1;s:1:"c";r:1;}"
  283. object(stdClass)#%d (3) {
  284. ["a"]=>
  285. *RECURSION*
  286. ["b"]=>
  287. *RECURSION*
  288. ["c"]=>
  289. *RECURSION*
  290. }
  291. object(stdClass)#%d (3) {
  292. ["a"]=>
  293. string(14) "obj->a.changed"
  294. ["b"]=>
  295. *RECURSION*
  296. ["c"]=>
  297. *RECURSION*
  298. }
  299. object(stdClass)#%d (3) {
  300. ["a"]=>
  301. string(14) "obj->a.changed"
  302. ["b"]=>
  303. string(14) "obj->b.changed"
  304. ["c"]=>
  305. *RECURSION*
  306. }
  307. object(stdClass)#%d (3) {
  308. ["a"]=>
  309. string(14) "obj->a.changed"
  310. ["b"]=>
  311. string(14) "obj->b.changed"
  312. ["c"]=>
  313. string(14) "obj->c.changed"
  314. }
  315. Done