• 关于PHP的JsonSerializable


    我们都知道php的json_encode()可以对一个对象进行编码生成json字符串,但是我们的程序中对象往往是很复杂的,json_encode()只是json话对象的公共属性,这的确有点力不从心,好在在PHP5.4开始有了一个叫做JsonSerializable的接口,它解决了这个痛点,我们来看一看。

    什么是JsonSerializable

    JsonSerializable是一个接口任何实现了这个接口的类, 需要定义一个jsonSerialize()方法, 这个方法会在对这个类的对象做Json化的时候被调用, 这个时候你就可以在这个方法内 , 随意调整最终的Json化的结果。

    不懂么?来个例子!

    class Man 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 Man (23, 42));// 输出65

    你看到了,此时当json_encode对Man类的对象进行编码时,因为Man类继承了JsonSerializable ,因此不会去管类的公共属性而是调用了jsonSerialize函数,将其结果返回。

    为何讲这个

    可能你会疑问为何我会说这个,一来现在app、微服务大道其行的今天,json协议重要的不要不要的,了解这个接口对我们操作json益处很大,二来在yii的Json类中也用到了JsonSerializable接口,所以学习这对我们研究yii源代码是很有好处的。

    原文地址:https://segmentfault.com/a/1190000010449725

  • 相关阅读:
    Kylin 与 Spark SQL相比,有哪些差异和优势?
    apache kylin2.10在原生hadoop集群上安装
    ambari安装 QA
    mysql 5.7 学习
    Public key for ambari-server-2.4.2.0-136.x86_64.rpm is not installed 安装ambari报错总结
    python 练习
    centos 扩容
    Linux中Cache内存占用过高解决办法
    HyperLogLog
    星型模式、雪花模式和事实星座模式
  • 原文地址:https://www.cnblogs.com/zhangzhijian/p/14604151.html
Copyright © 2020-2023  润新知