Comment sérialiser des objets PHP en JSON dans les versions antérieures à PHP 5.4 ?

Patricia Arquette
Libérer: 2024-10-28 04:34:31
original
519 Les gens l'ont consulté

How to Serialize PHP Objects to JSON in Versions Prior to PHP 5.4?

Sérialisation d'objets PHP vers JSON

La sérialisation d'objets PHP vers JSON est couramment utilisée pour transporter des données sur le Web. Cependant, la réalisation de cette fonctionnalité dans PHP < 5.4 pose des défis, car la nouvelle interface JsonSerializing n'est pas disponible.

Conversion d'objets en JSON en PHP < 5.4

Pour les anciennes versions de PHP, une approche consiste à réduire récursivement l'objet dans un tableau avant de l'encoder. Cela peut être accompli en utilisant array_walk_recursive(), comme le montre l'exemple fourni :

<code class="php">function toArray($object) {
    $array = (array) $object;
    array_walk_recursive($array, function (&$property) {
        if ($property instanceof Mf_Data) {
            $property = $property->toArray();
        }
    });
    return $array;
}</p>
<p>Cependant, cette méthode échoue lorsque les objets ont des références à leur parent, ce qui entraîne des erreurs de récursion. La suppression de la référence parent résout ce problème.</p>
<p><strong>Solution finale de conversion de tableau</strong></p>
<p>Une version améliorée de la fonction toArray a été développée :</p>
<pre class="brush:php;toolbar:false"><code class="php">function toArray($object) {
    $array = get_object_vars($object);
    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>
Copier après la connexion

Ceci l'implémentation utilise get_object_vars() pour obtenir les propriétés de l'objet, à l'exclusion des propriétés _parent et _index.

Utilisation d'interfaces pour un code plus propre

Une solution encore plus propre implique l'utilisation d'interfaces pour vérifier l'objet types :

<code class="php">interface ToMapInterface {
    function toMap();
    function getToMapProperties();
}

class Node implements ToMapInterface {
    function toMap() {
        $array = $this->getToMapProperties();
        array_walk_recursive($array, function (&$value) {
            if ($value instanceof ToMapInterface) {
                $value = $value->toMap();
            }
        });
        return $array;
    }

    function getToMapProperties() {
        return array_diff_key(get_object_vars($this), array_flip(['index', 'parent']));
    }
}</code>
Copier après la connexion

Cette approche fournit un moyen modulaire et extensible de convertir des objets complexes en tableaux pour la sérialisation JSON. Cela évite également le besoin de copier des propriétés inutiles ou de vérifications fragiles de method_exists().

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!

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal