Maison >développement back-end >tutoriel php >Explication sur php json_encode ne prenant pas en charge les attributs privés d'objet
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.
<?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);?>
Sortie :
{"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)
Après l'exécution de json_encode, l'âge de l'attribut privé est perdu.
Le code modifié est le suivant :
<?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);?>
Sortie :
{"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
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!