serialize.phpt 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. --TEST--
  2. json_encode() Serialization tests
  3. --SKIPIF--
  4. <?php if (!extension_loaded("json")) print "skip"; ?>
  5. --FILE--
  6. <?php
  7. class NonSerializingTest
  8. {
  9. public $data;
  10. public function __construct($data)
  11. {
  12. $this->data = $data;
  13. }
  14. }
  15. class SerializingTest extends NonSerializingTest implements JsonSerializable
  16. {
  17. public function jsonSerialize()
  18. {
  19. return $this->data;
  20. }
  21. }
  22. class ValueSerializingTest extends SerializingTest
  23. {
  24. public function jsonSerialize()
  25. {
  26. return array_values(is_array($this->data) ? $this->data : get_object_vars($this->data));
  27. }
  28. }
  29. class SelfSerializingTest extends SerializingTest
  30. {
  31. public function jsonSerialize()
  32. {
  33. return $this;
  34. }
  35. }
  36. $adata = array(
  37. 'str' => 'foo',
  38. 'int' => 1,
  39. 'float' => 2.3,
  40. 'bool' => false,
  41. 'nil' => null,
  42. 'arr' => array(1,2,3),
  43. 'obj' => new StdClass,
  44. );
  45. $ndata = array_values($adata);
  46. $odata = (object)$adata;
  47. foreach(array('NonSerializingTest','SerializingTest','ValueSerializingTest','SelfSerializingTest') as $class) {
  48. echo "==$class==\n";
  49. echo json_encode(new $class($adata)), "\n";
  50. echo json_encode(new $class($ndata)), "\n";
  51. echo json_encode(new $class($odata)), "\n";
  52. }
  53. --EXPECT--
  54. ==NonSerializingTest==
  55. {"data":{"str":"foo","int":1,"float":2.3,"bool":false,"nil":null,"arr":[1,2,3],"obj":{}}}
  56. {"data":["foo",1,2.3,false,null,[1,2,3],{}]}
  57. {"data":{"str":"foo","int":1,"float":2.3,"bool":false,"nil":null,"arr":[1,2,3],"obj":{}}}
  58. ==SerializingTest==
  59. {"str":"foo","int":1,"float":2.3,"bool":false,"nil":null,"arr":[1,2,3],"obj":{}}
  60. ["foo",1,2.3,false,null,[1,2,3],{}]
  61. {"str":"foo","int":1,"float":2.3,"bool":false,"nil":null,"arr":[1,2,3],"obj":{}}
  62. ==ValueSerializingTest==
  63. ["foo",1,2.3,false,null,[1,2,3],{}]
  64. ["foo",1,2.3,false,null,[1,2,3],{}]
  65. ["foo",1,2.3,false,null,[1,2,3],{}]
  66. ==SelfSerializingTest==
  67. {"data":{"str":"foo","int":1,"float":2.3,"bool":false,"nil":null,"arr":[1,2,3],"obj":{}}}
  68. {"data":["foo",1,2.3,false,null,[1,2,3],{}]}
  69. {"data":{"str":"foo","int":1,"float":2.3,"bool":false,"nil":null,"arr":[1,2,3],"obj":{}}}