您现在的位置是:首页 > 学无止境
JsonSerializable接口
本文地址: http://www.laruence.com/2011/10/10/2204.html
Json是Ajax应用中最为通用的数据传输格式(协议), 主流的编程语言都带有对Json的支持, 在PHP中, 有json_encode/json_decode, 可以很方便的构造Json数据格...
        Json是Ajax应用中最为通用的数据传输格式(协议), 主流的编程语言都带有对Json的支持, 在PHP中, 有json_encode/json_decode, 可以很方便的构造Json数据格...
本文地址: http://www.laruence.com/2011/10/10/2204.html
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, 在5.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]]最后提醒一下, PHP 5.4还处于开发阶段, 在最终release之前, 这些特性都可能被调整或者更改. 如果大家有任何建议, 也欢迎反馈, 帮助我们使得PHP变得更好.文章评论
- 登录后评论
 
点击排行
- 
            php-fpm安装、配置与优化
            
转载自:https://www.zybuluo.com/phper/note/89081 1、php中...
 - 
            centos下postgresql的安装与配置
            
一、安装(以root身份进行)1、检出最新的postgresql的yum配置从ht...
 - 
            Mysql的大小写敏感性
            
MYSQL在默认的情况下查询是不区分大小写的,例如:CREATE TABLE...
 - 
            关于URL编码
            
转载自:http://www.ruanyifeng.com/blog/2010/02/url_encoding....
 - 
            header中的Cache-control
            
网页的缓存是由HTTP消息头中的“Cache-control”来控制的,常见的...