php json_encode不支援對象私人屬性的解決方案

來源:互聯網
上載者:User
本文介紹php json_encode不支援對象私人屬性的解決方案,json_encode可以把對象轉為json格式,使用json_decode可以還原為對象。

但如果對象內含有私人屬性,執行json_encode後,私人屬性會丟失。

例子:json_encode丟失對象私人屬性

<?php// 使用者類class user{    public $id = 1;    public $name = 'fdipzone';    public $profession = 'programmer';    private $age = 18;}// 對象$oUser = new User;// json_encode$json = json_encode($oUser);echo $json;// json_decode$oUser = json_decode($json);var_dump($oUser);?>

輸出:

{"id":1,"name":"fdipzone","profession":"programmer"}object(stdClass)[2]  public 'id' => int 1  public 'name' => string 'fdipzone' (length=8)  public 'profession' => string 'programmer' (length=10)

在執行json_encode後,私人屬性age丟失了。

json_encode後對象的私人屬性丟失解決方案

我們可以修改類,使其實現JsonSerializable抽象類別的介面方法jsonSerialize,指定需要被序列化成JSON的資料。

關於JsonSerializable::jsonSerialize方法可參考官網:http://php.net/manual/zh/jsonserializable.jsonserialize.php

修改後代碼如下:

<?php// 使用者類class user implements JsonSerializable{    public $id = 1;    public $name = 'fdipzone';    public $profession = 'programmer';    private $age = 18;    // 實現的抽象類別方法,指定需要被序列化JSON的資料    public function jsonSerialize() {        $data = [];        foreach ($this as $key=>$val){            if ($val !== null) $data[$key] = $val;        }        return $data;    }}// 對象$oUser = new User;// json_encode$json = json_encode($oUser);echo $json;// json_decode$oUser = json_decode($json);var_dump($oUser);?>

輸出:

{"id":1,"name":"fdipzone","profession":"programmer","age":18}object(stdClass)[2]  public 'id' => int 1  public 'name' => string 'fdipzone' (length=8)  public 'profession' => string 'programmer' (length=10)  public 'age' => int 18

在指定了需要被序列化成JSON的資料後,json_encode可以讀取到私人屬性age。

本文介紹php json_encode不支援對象私人屬性的解決方案,json_encode可以把對象轉為json格式,使用json_decode可以還原為對象。

但如果對象內含有私人屬性,執行json_encode後,私人屬性會丟失。

例子:json_encode丟失對象私人屬性

<?php// 使用者類class user{    public $id = 1;    public $name = 'fdipzone';    public $profession = 'programmer';    private $age = 18;}// 對象$oUser = new User;// json_encode$json = json_encode($oUser);echo $json;// json_decode$oUser = json_decode($json);var_dump($oUser);?>

輸出:

{"id":1,"name":"fdipzone","profession":"programmer"}object(stdClass)[2]  public 'id' => int 1  public 'name' => string 'fdipzone' (length=8)  public 'profession' => string 'programmer' (length=10)

在執行json_encode後,私人屬性age丟失了。

json_encode後對象的私人屬性丟失解決方案

我們可以修改類,使其實現JsonSerializable抽象類別的介面方法jsonSerialize,指定需要被序列化成JSON的資料。

關於JsonSerializable::jsonSerialize方法可參考官網:http://php.net/manual/zh/jsonserializable.jsonserialize.php

修改後代碼如下:

<?php// 使用者類class user implements JsonSerializable{    public $id = 1;    public $name = 'fdipzone';    public $profession = 'programmer';    private $age = 18;    // 實現的抽象類別方法,指定需要被序列化JSON的資料    public function jsonSerialize() {        $data = [];        foreach ($this as $key=>$val){            if ($val !== null) $data[$key] = $val;        }        return $data;    }}// 對象$oUser = new User;// json_encode$json = json_encode($oUser);echo $json;// json_decode$oUser = json_decode($json);var_dump($oUser);?>

輸出:

{"id":1,"name":"fdipzone","profession":"programmer","age":18}object(stdClass)[2]  public 'id' => int 1  public 'name' => string 'fdipzone' (length=8)  public 'profession' => string 'programmer' (length=10)  public 'age' => int 18

在指定了需要被序列化成JSON的資料後,json_encode可以讀取到私人屬性age。

本文講解了php json_encode不支援對象私人屬性的解決方案 ,更多相關內容請關注php中文網。

相關推薦:

js 基礎 資料類型及轉換 進位 操作符

JavaScript中 with的用法

js和php嵌套

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.