Conversion d'objets PHP en JSON avant PHP 5.4
Alors que PHP 5.4 introduisait l'interface pratique JsonSerialalisable pour simplifier la conversion d'objet en JSON, cette L'option n'est pas disponible pour les versions PHP inférieures à 5.4. Pour obtenir des fonctionnalités similaires dans les versions antérieures, envisagez les approches suivantes :
Méthode 1 : conversion de type et conversion de tableau
Pour les objets simples, conversion de type de l'objet en tableau puis encoder le tableau résultant peut suffire :
<code class="php">$json = json_encode((array)$object);</code>
Méthode 2 : Méthode récursive toArray
Créez une méthode toArray() dans votre classe d'objet pour convertir récursivement son propriétés à un tableau. Si les propriétés sont elles-mêmes des objets, appelez également toArray() de manière récursive :
<code class="php">public function toArray() { $array = (array) $this; array_walk_recursive($array, function (&$property) { if ($property instanceof Mf_Data) { $property = $property->toArray(); } }); return $array; }</code>
En supprimant les références circulaires (par exemple, _parent) du tableau, vous pouvez éviter les problèmes liés à la récursion :
<code class="php">public function toArray() { $array = get_object_vars($this); unset($array['_parent'], $array['_index']); array_walk_recursive($array, function (&$property) { if (is_object($property) && method_exists($property, 'toArray')) { $property = $property->toArray(); } }); return $array; }</code>
Méthode 3 : Conversion basée sur l'interface
Définir une interface (par exemple, ToMapInterface) qui inclut des méthodes pour convertir un objet en tableau (toMap()) et obtenir un sous-ensemble de propriétés à inclure dans la conversion (getToMapProperties()) :
<code class="php">interface ToMapInterface { function toMap(); function getToMapProperties(); }</code>
Dans votre classe Node, implémentez ces méthodes pour créer un processus de conversion plus structuré et testable :
<code class="php">class Node implements ToMapInterface { public function toMap() { $array = $this->getToMapProperties(); array_walk_recursive($array, function (&$value) { if ($value instanceof ToMapInterface) { $value = $value->toMap(); } }); return $array; } public function getToMapProperties() { return array_diff_key(get_object_vars($this), array_flip(array( 'index', 'parent' ))); } }</code>
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!