web-dev-qa-db-fra.com

Pourquoi WordPress utilise-t-il sérialiser plutôt que json_encode pour la table d'options?

J'ai une compréhension de base de sérialiser (je le rencontre souvent lorsque je migre des installations WordPress) et je viens de découvrir json_encode .

Étant donné que la sérialisation pose tellement de problèmes pour remplacer les chaînes dans la base de données (par exemple, l'édition directe d'un champ optinos), pourquoi WordPress préfère-t-il sérialiser à json_encode (apparemment similaire), qui n'insère pas la longueur de la chaîne dans la valeur stockée.

Ma première pensée a été que cela pourrait apporter des avantages en termes de sécurité ou de vérification d'erreur. WordPress ignorera l'option si les longueurs de chaîne sont incorrectes .. mais une explication qualifiée m'intéresse :)

5
ptim
  • la représentation en série peut être stockée dans le texte et inversée
  • La représentation JSON peut être stockée dans le texte mais ne peut pas toujours être inversée avec précision

Exécutez cet exemple:

$query = new WP_Query();
var_dump( $query );
var_dump( unserialize( serialize( $query ) ) );
var_dump( json_decode( json_encode( $query ) ) );
  • Après la sérialisation, l'objet WP_Query correct est recréé.
  • Après avoir traversé JSON, vous obtenez un objet stdClass.

En un mot, la sérialisation fait partie intégrante de PHP et a beaucoup de synergie avec la manipulation des données qu'elle contient. JSON est un format indépendant de la langue, pratique pour les systèmes qui communiquent entre eux, mais qui est loin d’être complet et qui ne peut pas faire les choses dans PHP, ce que la sérialisation fait sans arrière-pensée.

9
Rarst

Voir ici pour une bonne discussion sur le raisonnement derrière ne pas le changer en JSON:

https://core.trac.wordpress.org/ticket/23753

1
guidod