serialize.phpt 2.0 KB

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