Maison >développement back-end >tutoriel php >Explication sur php json_encode ne prenant pas en charge les attributs privés d'objet

Explication sur php json_encode ne prenant pas en charge les attributs privés d'objet

jacklove
jackloveoriginal
2018-06-08 15:09:541886parcourir

Cet article présente la solution au problème selon lequel php json_encode ne prend pas en charge les propriétés privées des objets. json_encode peut convertir des objets au format json, et json_decode peut être utilisé pour les restaurer en objets.

Mais si l'objet contient des attributs privés, les attributs privés seront perdus après l'exécution de json_encode.

Exemple : json_encode perd l'attribut privé de l'objet

<?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);?>

Sortie :

{"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)

Après l'exécution de json_encode, l'âge de l'attribut privé est perdu.

Solution à la perte des attributs privés des objets après json_encode

Le code modifié est le suivant :

<?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);?>

Sortie :

{"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

Après avoir spécifié les données qui doivent être sérialisées en JSON, json_encode peut lire l'âge de l'attribut privé.

Cet article explique les connaissances pertinentes selon lesquelles php json_encode ne prend pas en charge les attributs privés des objets. Pour plus de contenu connexe, veuillez faire attention au site Web chinois de php.

Recommandations associées :

Explication sur PHP générant un contenu unique lié à la classe RequestID

Taille de la capacité de la table de base de données MySQL View

Explication détaillée d'une classe d'opération Mysql en mode singleton encapsulée par PHP

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn