/
vshmidt
/
php
Обзор
Документация
Войти
/
vshmidt
/
php
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
ext/json/tests/serialize.phpt
79 строк
2 KB
Máté Kocsis
Declare tentative return types for ext/json (#7051)
27 май 2021, 11:47
Не верифицирован
27 май 2021, 11:47
5beba0b
Код
Авторство
О чём код?
--TEST-- json_encode() Serialization tests --INI-- serialize_precision=-1 --FILE-- <?php class NonSerializingTest { public $data; public function __construct($data) { $this->data = $data; } } class SerializingTest extends NonSerializingTest implements JsonSerializable { public function jsonSerialize(): mixed { return $this->data; } } class ValueSerializingTest extends SerializingTest { public function jsonSerialize(): mixed { return array_values(is_array($this->data) ? $this->data : get_object_vars($this->data)); } } class SelfSerializingTest extends SerializingTest { public function jsonSerialize(): mixed { return $this; } } $adata = array( 'str' => 'foo', 'int' => 1, 'float' => 2.3, 'bool' => false, 'nil' => null, 'arr' => array(1,2,3), 'obj' => new StdClass, ); $ndata = array_values($adata); $odata = (object)$adata; foreach(array('NonSerializingTest','SerializingTest','ValueSerializingTest','SelfSerializingTest') as $class) { echo "==$class==\n"; echo json_encode(new $class($adata)), "\n"; echo json_encode(new $class($ndata)), "\n"; echo json_encode(new $class($odata)), "\n"; } ?> --EXPECT-- ==NonSerializingTest== {"data":{"str":"foo","int":1,"float":2.3,"bool":false,"nil":null,"arr":[1,2,3],"obj":{}}} {"data":["foo",1,2.3,false,null,[1,2,3],{}]} {"data":{"str":"foo","int":1,"float":2.3,"bool":false,"nil":null,"arr":[1,2,3],"obj":{}}} ==SerializingTest== {"str":"foo","int":1,"float":2.3,"bool":false,"nil":null,"arr":[1,2,3],"obj":{}} ["foo",1,2.3,false,null,[1,2,3],{}] {"str":"foo","int":1,"float":2.3,"bool":false,"nil":null,"arr":[1,2,3],"obj":{}} ==ValueSerializingTest== ["foo",1,2.3,false,null,[1,2,3],{}] ["foo",1,2.3,false,null,[1,2,3],{}] ["foo",1,2.3,false,null,[1,2,3],{}] ==SelfSerializingTest== {"data":{"str":"foo","int":1,"float":2.3,"bool":false,"nil":null,"arr":[1,2,3],"obj":{}}} {"data":["foo",1,2.3,false,null,[1,2,3],{}]} {"data":{"str":"foo","int":1,"float":2.3,"bool":false,"nil":null,"arr":[1,2,3],"obj":{}}}