美文网首页
PHP5.4+ - JsonSerializable接口

PHP5.4+ - JsonSerializable接口

作者: Success85 | 来源:发表于2018-11-23 15:06 被阅读16次

    5.4中对Json做的一个改进.

    Json是Ajax应用中最为通用的数据传输格式(协议), 主流的编程语言都带有对Json的支持, 在PHP中, 有json_encode/json_decode, 可以很方便的构造Json数据格式.

    <?php
    echo json_encode(array(1,2,3,4));
    //[1,2,3,4]
    

    也可以Json化一个对象:

    <?php
    $o = new stdclass;
    $o->a = 42;
    echo json_encode($o); //{"a":42}
    

    但这样就有个问题, 现实生活中的对象是很复杂的, Json的这种默认只对属性做操作的做法有的时候是不能解决问题的, 比如我们希望通过私有成员来做一些计算得到最后的Json化数据, 又或者我们希望用一个字符串来代替一个object.

    在以前, 那你只能自己拼凑Json串了. 不过感谢Sara, 在PHP5.4中, Json新增了一个JsonSerializable接口, 任何实现了这个接口的类, 需要定义一个jsonSerialize()方法, 这个方法会在对这个类的对象做Json化的时候被调用, 这个时候你就可以在这个方法内 , 随意调整最终的Json化的结果:

    <?php
    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;
        }
    }
    echo json_encode(new JsonTest(23, 42));
    //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]]
    

    相关文章

      网友评论

          本文标题:PHP5.4+ - JsonSerializable接口

          本文链接:https://www.haomeiwen.com/subject/rmujqqtx.html