serialize.phpt 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. --TEST--
  2. json_encode() Serialization tests
  3. --INI--
  4. serialize_precision=-1
  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(): mixed
  18. {
  19. return $this->data;
  20. }
  21. }
  22. class ValueSerializingTest extends SerializingTest
  23. {
  24. public function jsonSerialize(): mixed
  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(): mixed
  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. ?>
  54. --EXPECT--
  55. ==NonSerializingTest==
  56. {"data":{"str":"foo","int":1,"float":2.3,"bool":false,"nil":null,"arr":[1,2,3],"obj":{}}}
  57. {"data":["foo",1,2.3,false,null,[1,2,3],{}]}
  58. {"data":{"str":"foo","int":1,"float":2.3,"bool":false,"nil":null,"arr":[1,2,3],"obj":{}}}
  59. ==SerializingTest==
  60. {"str":"foo","int":1,"float":2.3,"bool":false,"nil":null,"arr":[1,2,3],"obj":{}}
  61. ["foo",1,2.3,false,null,[1,2,3],{}]
  62. {"str":"foo","int":1,"float":2.3,"bool":false,"nil":null,"arr":[1,2,3],"obj":{}}
  63. ==ValueSerializingTest==
  64. ["foo",1,2.3,false,null,[1,2,3],{}]
  65. ["foo",1,2.3,false,null,[1,2,3],{}]
  66. ["foo",1,2.3,false,null,[1,2,3],{}]
  67. ==SelfSerializingTest==
  68. {"data":{"str":"foo","int":1,"float":2.3,"bool":false,"nil":null,"arr":[1,2,3],"obj":{}}}
  69. {"data":["foo",1,2.3,false,null,[1,2,3],{}]}
  70. {"data":{"str":"foo","int":1,"float":2.3,"bool":false,"nil":null,"arr":[1,2,3],"obj":{}}}