JsonSerializable接口

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

内容简介:昨天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技术博客大学习


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

查看所有标签

猜你喜欢:

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

CSS与DHTML精髓(第2版)

CSS与DHTML精髓(第2版)

Dan Livingston / 清华大学 / 2003-7-1 / 34.00

CSS与DHTML精髓(第二版),ISBN:9787302066941,作者:战晓苏译;战晓苏译一起来看看 《CSS与DHTML精髓(第2版)》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

html转js在线工具
html转js在线工具

html转js在线工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换