Erläuterung dazu, dass PHP json_encode keine privaten Objektattribute unterstützt

jacklove
Freigeben: 2023-03-30 19:40:01
Original
1844 Leute haben es durchsucht

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.

Beispiel: json_encode hat das private Attribut des Objekts verloren

<?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);?>
Nach dem Login kopieren

Ausgabe:

{"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)
Nach dem Login kopieren

Nach der Ausführung von json_encode geht das Alter des privaten Attributs verloren.

Lösung für den Verlust privater Attribute von Objekten nach json_encode

Der geänderte Code lautet wie folgt:

<?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);?>
Nach dem Login kopieren

Ausgabe :

{"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
Nach dem Login kopieren

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 das relevante Wissen erläutert, dass PHP JSON_ENCODE keine privaten Objektattribute unterstützt. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website.

Verwandte Empfehlungen:

Erläuterung zum Generieren eindeutiger RequestID-Klassenbezogener Inhalte durch PHP

Kapazitätsgröße der MySQL View-Datenbanktabelle

Detaillierte Erläuterung einer von PHP gekapselten Singleton-Modus-MySQL-Operationsklasse

Das obige ist der detaillierte Inhalt vonErläuterung dazu, dass PHP json_encode keine privaten Objektattribute unterstützt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage