ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
在5.4中, Json新增了一个JsonSerializable接口, 任何实现了这个接口的类, 需要定义一个jsonSerialize()方法, 这个方法会在对这个**类的对象做Json化**的时候被调用, 这个时候你就可以在这个方法内 , 随意调整最终的Json化的结果: ``` class JsonTest implements JsonSerializable { private $a, $b; public function __construct($a, $b) { $this->a = $a; $this->b = $b; } public function jsonSerialize() { return $this->a + $this->b; } } //json_encode JsonTest类的对象时触发jsonSerialize()方法 echo json_encode(new JsonTest(23, 42)); //65 ``` Json的这种默认只对属性做操作的做法有的时候是不能解决问题的, 比如我们希望通过私有成员来做一些计算得到最后的Json化数据, 又或者我们希望用一个字符串来代替一个object. 在以前, 那你只能自己拼凑Json串 ``` $data = array( new stdClass(); new JsonTest(1,2), new JsonTest(3,4), array(5,6) ); echo json_encode($data); //[{},3,7,[5,6]] ```