首頁  >  文章  >  後端開發  >  關於php json_encode不支援物件私有屬性的講解

關於php json_encode不支援物件私有屬性的講解

jacklove
jacklove原創
2018-06-08 15:09:541791瀏覽

本文介紹php json_encode不支援物件私有屬性的解決方法,json_encode可以把物件轉換為json格式,使用json_decode可以還原為物件。

但如果物件內含有私有屬性,執行json_encode後,私有屬性會遺失

範例:json_encode遺失物件私有屬性

<?php// 用户类class user{

    public $id = 1;    public $name = &#39;fdipzone&#39;;    public $profession = &#39;programmer&#39;;    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 &#39;id&#39; => int 1
  public &#39;name&#39; => string &#39;fdipzone&#39; (length=8)  public &#39;profession&#39; => string &#39;programmer&#39; (length=10)

執行json_encode後,私有屬性age遺失了。

json_encode後物件的私有屬性遺失解決方法

#修改後程式碼如下:##

<?php// 用户类class user implements JsonSerializable{

    public $id = 1;    public $name = &#39;fdipzone&#39;;    public $profession = &#39;programmer&#39;;    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 &#39;id&#39; => int 1
  public &#39;name&#39; => string &#39;fdipzone&#39; (length=8)  public &#39;profession&#39; => string &#39;programmer&#39; (length=10)  public &#39;age&#39; => int 18

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

這篇文章說明了php json_encode不支援物件私有屬性的相關知識,更多相關內容請關注php中文網。

相關推薦:

講解PHP產生唯一RequestID類別相關內容

MySQL檢視資料庫表格容量大小

詳解PHP封裝的一個單例模式Mysql操作類別
#

以上是關於php json_encode不支援物件私有屬性的講解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn