IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[Tableaux] json_encode() et les objets


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2006
    Messages
    37
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2006
    Messages : 37
    Par défaut [Tableaux] json_encode() et les objets
    Je viens de découvrir l'extension json de php ; et ca tombe bien. Car je travaille sur mon premier vrai projet en AJAX.

    Mais j'ai quelques petits soucis avec.

    Je me suis apercu que ; json_encode() ; n'encodais que les propriétées de portée publique sur mes objets.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    class myClass {
     
        private $property1;
        protected $property2;
        public $property3;
     
        public function __construct() {
            $this->property1 = "valeur 1";
            $this->property2 = "valeur 2";
            $this->property3 = "valeur 3";
        }
     
    }
    $test = new myClass();
    echo json_encode($test);
    Affiche :
    {"property3":"valeur3"}
    Ca parait évident. Cependant ; mon probléme c'est que ; dans mon code actuel (et c'est une habitude ... bonne ou mauvaise à vous de juger) les valeurs que je souhaite afficher au format json n'ont pas de portée publique.

    La première chose à laquelle j'ai pensé ; fut d'encoder au format json au sein même de mon objet ; me disant "ainsi il devrais avoir accés aux propriétées privé". J'ai donc effectué le test suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    class myClass {
     
        private $property1;
        protected $property2;
        public $property3;
     
        public function __construct() {
            $this->property1 = "valeur 1";
            $this->property2 = "valeur 2";
            $this->property3 = "valeur 3";
        }
     
        public function __toString() {
            return json_encode(&$this);
        }
     
    }
    echo new myClass();
    Mais là ; stupeur ! Toujours le même résultat :
    {"property3":"valeur3"}
    J'avoue totalement ne plus avoir d'idées pour résoudre ce probléme. Et je n'ai pas trop le temps de me lancer dans la création d'un outil pour palier à ca ... donc ; je viens voir si certains d'entre vous ont déjà rencontrer ce cas.

    NB ; pour information je ne souhaite pas changer la portée de mes propriétés. Car je souhaite je ne souhaite pas qu'on puisse modifier leur contenu sans passer par les méthodes que j'ai moi même définis.

  2. #2
    Membre émérite

    Profil pro
    H4X0|2 @ YourLabs Business Service
    Inscrit en
    Octobre 2006
    Messages
    657
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : H4X0|2 @ YourLabs Business Service
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 657
    Par défaut
    "php at mikeboers dot com" sur php.net/json_encode propose de passer par serialize.
    Attention au retour sur le probleme dans l'autre sens: json_decode().

  3. #3
    Membre confirmé
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2006
    Messages
    37
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2006
    Messages : 37
    Par défaut
    Transformer l'objet en tableau ; puis encoder ce tableau au format json ... mouais.

    Je suis pas trop trop fan. Mais tant que ca fonctionne.

    Merci ; résolu ^^

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 16
    Dernier message: 06/06/2007, 12h42
  2. question de débutant sur les objets
    Par boucher_emilie dans le forum ASP
    Réponses: 3
    Dernier message: 06/08/2004, 10h51
  3. Architecture pour les objets d'un jeu
    Par Freakazoid dans le forum DirectX
    Réponses: 7
    Dernier message: 31/07/2004, 13h09
  4. Réponses: 5
    Dernier message: 07/07/2004, 15h13
  5. Rafraichissement de la fiche ainsi que de tous les objets
    Par portu dans le forum Composants VCL
    Réponses: 7
    Dernier message: 06/01/2004, 00h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo