php的json格式,PHP对象为JSON格式

这个问题已经在这里有了答案:            >            PHP json_encode class private members                                    9个

考虑这个简化的类:

class foo {

private $fooVar;

public getFooVar(){

}

}

$fooObj = new foo();

想要我想要/需要做的就是将其转换为JSON格式,所以我想到了

echo json_encode($fooObj);

但是它不起作用,我没有fooVar和即时消息,因为$fooVar是私有的.

还有其他方法可以做到这一点而不必妥协并使$fooVar公开吗?

谢谢一群!

解决方法:

如果您使用的是PHP 5.3(或更早版本),您将无法真正轻松地完成您所要求的工作.您将不会获得以JSON编码的方法,因为JSON是一种数据格式并且不包含函数,并且您不会获得该属性,因为它是一个私有属性.您已经知道了很多,但是值得重申一下,您说得对,这并不容易.在这种情况下,即使将getter用作魔术__get()方法将其变成只读的公共属性,也无法正常工作.

在PHP 5.3中,可以使用几种解决方法.

>反思. PHP包含一个Reflection API,它使您可以访问有关对象和类的详细信息,包括从私有成员中读取值.但是,显然,这将意味着编写大量代码以获取价值,而且也不会很快.

>在类内编写json_encode调用.这样,您可以包含私有财产.我建议在对象内部使用get_object_vars($this)以JSON友好的方式获取私有属性.

如果您使用的是PHP 5.4,则还有其他选择:

> PHP 5.4引入了JsonSerializable接口.将实现JsonSerializable实现到您的类,并编写一个名为jsonSerialize()的方法.此方法应返回要包含在JSON字符串中的数据.您可以包括或排除所需的任何公共或私人财产.

PHP 5.5尚未发布,但它将为您添加另一个选项:

> PHP 5.5将引入一种更复杂的语法来定义属性,这将使您可以将属性定义为公共但只读的,或者在getter和setter中为它们包括更复杂的逻辑,但仍将它们作为属性.它将像现在__get()和__set()方法一样工作,但是将变量显式定义为属性,这意味着JSON序列化程序应该可以访问它们,而当前使用__get()则不能.

[编辑]-注意,以上段落不正确;所描述的功能未纳入PHP 5.5版本.现在还无法断定它是否会进入5.6.

希望能有所帮助.

标签:json,php

来源: https://codeday.me/bug/20191031/1974521.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值