美文网首页
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接口

    5.4中对Json做的一个改进. Json是Ajax应用中最为通用的数据传输格式(协议), 主流的编程语言都带有对...

  • Flutter Json序列号和反序列化遇到问题 Missing

    一.介绍 1、@JsonSerializable() 这是表示告诉编译器这个类是需要生成Model类的2、@Jso...

  • MS-特性-Trait

    Trait (PHP5.4+) Trait可以看做类的部分实现,可以混入一个或多个现有的PHP类中。其作用有两个:...

  • PHP5.4+ 上传进度支持(Upload progress i

    文件上传进度反馈, 这个需求在当前是越来越普遍, 比如大附件邮件. 在PHP5.4以前, 我们可以通过APC提供的...

  • 接口接口接口

    发现很多朋友对于接口都很纠结,阐述一下个人对接口的理解。 接口分为很多种类型,程序语言内部接口 移动端和服务端接口...

  • Android常用接口

    不知名接口 头条接口: 科技接口: 财经接口: 军事接口: 体育接口: 房产接口: 足球接口: 娱乐接口: 电影接...

  • 第十八天 微信微博天气接口

    分享接口 微信接口 微博接口 天气接口 mob接口

  • 接口测试概述

    接口(interface)的概念 常见接口名词 接口测试: 接口测试目的: 接口测试的重要性: 接口测试流程 接口...

  • 接口测试

    接口测试概念: 接口:接口是为了提供一种服务 所有的接口统称为API,接口分为内部接口和外部接口 外部接口:测试被...

  • 接口

    接口 接口类型 空接口 接口嵌套 接口断言 type关键字

网友评论

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

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