Probleme avec __get et accès à des tableaux

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Probleme avec __get et accès à des tableaux

[Resolu]

par tibabs » 05 mars 2007, 00:40

Effectivement je viens de tester avec la modification que tu proposes.
Elle marche très bien.
JE dois toutefois indiquer qu'entre temps, suite une aide d'un autre forum, j'ai upgradé à la 5.2.1 qui a corrigé pas mal de bugs notamment sur __get.

Je ne sais pas si cela aurait aussi bien marché avec la 5.2.0 mais ta solution me semble plus propre.

Merci encore.

par titerm » 04 mars 2007, 20:39

En tte logique, puisque tu fais référence a un tableau via des offsets, il aurait fallut que tu implémentes l'interface ArrayAccess.
Autre solution, au lieu d'initialiser a null, tu initialise avec un object qui implémente nativement cette interface.
  
...
public function __construct() {
      foreach ($this->_proprietes as $propriete) $this->$propriete = new ArrayObject();
      $this->remplir();
   }

...



Après exec, tu as
FIN REMPLIR ==>
ArrayObject Object
(
[1] => toto
)

Probleme avec __get et accès à des tableaux

par Invité » 04 mars 2007, 18:19

Après essai, cela ne marche malheureusement pas !!!

Probleme avec __get et accès à des tableaux

par tibabs » 04 mars 2007, 16:47

Salut,

Il s'agit effectivement de développement en PHP5.

J'avoue que je n'ai pas regardé en profondeur les différences en ces différentes versions. J'avoue aussi que je ne sais pas comment faire pour rentrer dans le source d'une version de PHP.
Par contre, hier soir (ce matin vers 6h00) après avoir posté ce message j'ai été visité la base de données des bugs référencés sur php.net et j'ai constaté que des problèmes similaires étaient référencés (pb de passage par valeur ou par référence). J'ai posté aussi un message sur le forum d'apachefriends (xampp).
Je viens d'obtenir une réponse que je vous transmets et que je n'ai pas encore testé et pour lequel je ne connais pas la pérennité dans le temps.

Code : Tout sélectionner

public function __get($nom) {
For example you can change this line to:

Code : Tout sélectionner

public function &__get($nom) {
Ca m'a l'air d'aller dans le bon sens, mais cela m'interpelle quand même.

par @rthur » 04 mars 2007, 13:49

As-tu regardé quelles étaient les différences entre Xampp 1.5.2 et 1.5.5?
Travaillais tu également en PHP5 avec Xampp 1.5.2?

Probleme avec __get et accès à des tableaux

par tibabs » 04 mars 2007, 05:58

Bonjour avec Xampp 1.5.5 et 1.6.0a mes applis ne marchent plus alors qu'en 1.5.2 il n'y a pas de problème.
En faisant des tests j'ai réussi à cerner le problème. Vous trouverez ci-dessous un exemple qui ne donne pas le résultat escompté (
FIN REMPLIR ==> 
au lieu de
FIN REMPLIR ==>Array ( [1] => toto ) 
.

Merci d'avance pour vos aides.
Cordialement,
Thierry.

Code : Tout sélectionner

<?php $foo = new bidon(); class bidon { private $_proprietes = array('_t'); public function __construct() { foreach ($this->_proprietes as $propriete) $this->$propriete = null; $this->remplir(); } public function __set($nom, $valeur ) { if (!in_array($nom, $this->_proprietes, true)) { throw new Exception('propriete ' .$nom .' INCONNUE pour objet ClassAllMembres'); } $this->_proprietes[$nom] = $valeur; } public function __get($nom) { if (!in_array($nom, $this->_proprietes, true)) { throw new Exception('propriete ' .$nom .' INCONNUE pour objet bidon'); } return $this->_proprietes[$nom]; } private function remplir() { $this->_t [1] = 'toto'; print "<br>FIN REMPLIR ==>"; print_r($this->_t); } } ?>