Heim > Artikel > Backend-Entwicklung > Lösung für das Problem, dass PHP json_encode keine privaten Objektattribute unterstützt
In diesem Artikel wird die Lösung für das Problem vorgestellt, dass PHP json_encode die privaten Eigenschaften von Objekten nicht unterstützt. Json_encode kann Objekte in das JSON-Format konvertieren und json_decode kann verwendet werden, um sie in Objekte wiederherzustellen.
Aber wenn das Objekt private Attribute enthält, gehen die privaten Attribute verloren nach der Ausführung von 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);?>
Ausgabe:
{"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)
Nach der Ausführung von json_encode geht das Alter des privaten Attributs verloren.
Wir können die Klasse ändern, um die Schnittstellenmethode der abstrakten Klasse JsonSerializable zu implementieren und Daten anzugeben, die benötigt werden in JSON serialisiert werden. Informationen zur Methode
JsonSerializable::jsonSerializefinden Sie auf der offiziellen Website: http://php.net/manual/zh/jsonserializable.jsonserialize.php
Nach der Änderung lautet der Code wie folgt:<?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);?>
Ausgabe:
{"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
Nachdem die Daten angegeben wurden, die in JSON serialisiert werden müssen, kann json_encode das Alter des privaten Attributs lesen.
Dieser Artikel stellt die Lösung für das Problem vor, dass PHP
json_encodedie privaten Eigenschaften von Objekten nicht unterstützt. Json_encode kann Objekte in das JSON-Format konvertieren und json_decode kann verwendet werden, um sie in Objekte wiederherzustellen . Aber wenn das Objekt private Attribute enthält,
gehen die privaten Attribute verlorennach der Ausführung von json_encode. Beispiel: json_encode verliert das private Objektattribut
<?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)
Nach der Ausführung von json_encode geht das Alter des privaten Attributs verloren.
Lösung für den Verlust privater Eigenschaften von Objekten nach json_encode
zu implementieren und Daten anzugeben, die benötigt werden in JSON serialisiert werden. Informationen zur Methode JsonSerializable::jsonSerialize finden Sie auf der offiziellen Website: http://php.net/manual/zh/jsonserializable.jsonserialize.php
Nach der Änderung lautet der Code wie folgt:
<?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);?>
Ausgabe: {"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
Nachdem die Daten angegeben wurden, die in JSON serialisiert werden müssen, kann json_encode das Alter des privaten Attributs lesen.
In diesem Artikel wird die Lösung für das Problem erläutert, dass PHP JSON_ENCODE keine privaten Objektattribute unterstützt. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website.
Verwandte Empfehlungen:
grundlegende js-Datentypen und KonvertierungsoperatorenVerwendung von with in JavaScript
Das obige ist der detaillierte Inhalt vonLösung für das Problem, dass PHP json_encode keine privaten Objektattribute unterstützt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!