我们知道在 php 中,可以使用 json_encode() 对数据进行 json 编码,这个数据可以是 array,也可以是 object。
    但是在对 object 进行编码时,只能对 public 属性的进行编码,但这样就有个问题, 现实生活中的对象是很复杂的, Json的这种默认只对属性做操作的做法有的时候是不能解决问题的,比如我们希望通过私有成员来做一些计算得到最后的Json化数据,,又或者我们希望用一个字符串来代替一个object。
    在以前, 那你只能自己拼凑Json串了. 不过, 在5.4中, Json新增了一个JsonSerializable接口, 任何实现了这个接口的类, 需要定义一个jsonSerialize()方法, 这个方法会在对这个类的对象做Json化的时候被调用, 这个时候你就可以在这个方法内 , 随意调整最终的Json化的结果:

    1. <?php
    2. class JsonTest implements JsonSerializable {
    3. private $a, $b;
    4. public function __construct($a, $b) {
    5. $this->a = $a;
    6. $this->b = $b;
    7. }
    8. public function jsonSerialize() {
    9. return $this->a + $this->b;
    10. }
    11. }
    12. echo json_encode(new JsonTest(23, 42));
    13. ?>
    14. //65

    一个复杂点的例子

    <?php
    $data = array(
        new stdClass();
        new JsonTest(1,2),
        new JsonTest(3,4),
        array(5,6)
    );
    echo json_encode($data);
    ?>
    //[{},3,7,[5,6]]