JsonSerializable接口

栏目: PHP · 发布时间: 7年前

内容简介:昨天funlake提醒了我, 应该把一些PHP的新动向传播一下.恭喜候鸟加入了pdt,有什么新进展别忘了给咱cn phper通报一下呀。那么, 今天为大家介绍一下5.4中对Json做的一个改进.

昨天funlake提醒了我, 应该把一些 PHP 的新动向传播一下.

恭喜候鸟加入了pdt,有什么新进展别忘了给咱cn phper通报一下呀。

那么, 今天为大家介绍一下5.4中对Json做的一个改进.

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

  1. echo json_encode ( array ( 1 , 2 , 3 , 4 ));
  2. ?>
  3. //[1,2,3,4]

也可以Json化一个对象:

  1. $o = new stdclass ;
  2. $o -> a = 42 ;
  3. echo json_encode ( $o );
  4. ?>
  5. //{"a":42}

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

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

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

下面是个稍微复杂点的例子:

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

最后提醒一下, PHP 5.4还处于开发阶段, 在最终release之前, 这些特性都可能被调整或者更改. 如果大家有任何建议, 也欢迎反馈, 帮助我们使得PHP变得更好.

谢谢

PS: 这个特性最初由Johannes在他自己的blog中介绍: http://schlueters.de/blog/archives/135-Jason,-let-me-help-you!.html

觉得文章有用?立即:和朋友一起 共学习 共进步!

QQ技术交流群:445447336,欢迎加入!

扫一扫订阅我的微信号:IT技术博客大学习


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

算法设计与分析基础

算法设计与分析基础

Anany Levitin / 清华大学出版社 / 2007-11 / 59.00元

作者基于丰富的教学经验,开发了一套对算法进行分类的新方法。这套方法站在通用问题求解策略的高度,能对现有的大多数算法进行准确分类,从而使读者能够沿着一条清晰的、一致的、连贯的思路来探索算法设计与分析这一迷人领域。本书作为第2版,相对第1版增加了新的习题,还增加了“迭代改进”一章,使得原来的分类方法更加完善。 本书十分适合作为算法设计和分析的基础教材,也适合任何有兴趣探究算法奥秘的读者使用,只要......一起来看看 《算法设计与分析基础》 这本书的介绍吧!

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具