解决PHP类私有成员 json_encode取不了值的问题

本文介绍了一种解决PHP类中私有成员变量无法通过json_encode获取值的方法。通过实现JsonSerializable接口并覆盖jsonSerialize方法,可以有效解决此问题。示例代码展示了如何使用JMS Serializer库来序列化包含私有属性的对象。
部署运行你感兴趣的模型镜像

解决PHP类私有成员 json_encode取不了值的问题

<?php

use JMS\Serializer\Naming\IdenticalPropertyNamingStrategy;
use JMS\Serializer\SerializerBuilder;
use JMS\Serializer\SerializerInterface;

class Ml implements JsonSerializable
{

    private $name;
    private $age;

    public function __construct($aParams) {
        foreach ($aParams as $key => $val) {
            if (property_exists($this, $key)) $this->$key = $val;
        }
    }

    /**
     * 生成对象实例
     * 
     * @param array $aParams
     * 
     * @return Ml
     */
    static public function bind(array $aParams)
    {
        $oVO = new Ml($aParams);
        return $oVO;
    }

    public function jsonSerialize() {
        $data = [];
        foreach ($this as $key=>$val)
        {
            if ($val !== null) $data[$key] = $val;
        }
        return $data;
    }

    public static function cc()
    {
        $data = Ml::bind([
            'name'  => 'cc',
            'age'   => '12',
            'me'    => 'ken',
        ]);

        $serializer = SerializerBuilder::create()
                        ->setPropertyNamingStrategy(new IdenticalPropertyNamingStrategy())
                        ->build();

        // print '\n';
        $sdata = $serializer->serialize($data, 'json');

        echo json_encode($sdata);

        echo '<hr/>';

        echo json_encode($data);
    }

}

结果

"{\"name\":\"cc\",\"age\":\"12\"}"

{"name":"cc","age":"12"}

您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值