,我们都知道php的json_encode()可以对对象进行编码生成json字符串,但是我们程序中的对象往往非常复杂,而json_encode()只是json对象的公共属性。实在是有点无能为力。好在PHP5.4有一个接口叫JsonSerializable,解决了这个痛点。让我们来看看。什么是JsonSerializableJsonSerializable是一个接口。任何实现此接口的类都需要定义一个jsonSerialize()方法。当这个类的对象被Jsonified时会调用这个方法。这个时候你可以随意使用这个方法。调整最终的JSONized结果。不明白?让我们举个例子!类Man实现JsonSerializable{private$a,$b;公共函数__construct($a,$b){$this->a=$a;$this->b=$b;}publicfunctionjsonSerialize(){return$this->a+$this->b;}}echojson_encode(newMan(23,42));//可以看到输出65,此时json_encode对Man类的对象进行编码时,因为Man类继承了JsonSerializable,所以不用管理public类的属性,调用jsonSerialize函数并返回结果。你为什么要谈这个?你可能想知道为什么我会这样说。首先,现在应用和微服务兴起,json协议很重要。了解这个接口对我们操作json有很大的好处。二、yii中的Json类中也使用了JsonSerializable接口,所以学习这个对于我们研究yii的源码是很有好处的。本文首发于微信公众号米色兄弟。
