php jsonserializable,JsonSerializable接口 | 學步園

本文地址: http://www.laruence.com/2011/10/10/2204.html

Json是Ajax應用中最為通用的數據傳輸格式(協議), 主流的

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化的結果:

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變得更好.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值