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

jacklove
Libérer: 2023-03-30 19:40:01
original
1844 Les gens l'ont consulté

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);?>
Copier après la connexion

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)
Copier après la connexion

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);?>
Copier après la connexion

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
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal