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.
Affiche :
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);
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.{"property3":"valeur3"}
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 :
Mais là ; stupeur ! Toujours le même résultat :
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();
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.{"property3":"valeur3"}
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.
Partager