Benjamin Caubere development wordpress design acymailing newsletter animation flash

PHP5 Indirect modification of overloaded property

Récemment en travaillant sur un projet symfony(framework php sur lequel le php5 est stricte), j’ai fait face a un Notice que je n’avais jamais rencontré auparavant. Comme nombreux Notices ce dernier finit par faire planter l’application:

Indirect modification  of overloaded  property

Après quelques recherches sur la toile j’ai compris que cela avait bien un rapport avec le php5 strict de symfony.

En effet en php5 les propriétés d’un objet sont censées être récupérées par la méthode __get et définies par la méthode __set.

Le problème que j’ai rencontré était lorsque je définissait des tableaux multidimensionnel depuis une fonction :

class maClass{
...

function maFunction(){

$this->Prop[$index1][index2][index3]=$valeur;

}

...

}

Au final la variable n’était pas définie.
Une manière de palier a ce problème est de définir la variable en deux étapes, dans un premier temps on définit une variable temporaire, puis une fois la variable temporaire définie on peut l’attribuer a la propriété de notre objet.

class maClass{
...

function maFunction(){

$temporaryVar[$index1][index2][index3]=$valeur;
$this->Prop=$temporaryVar;

}

...

}

Comme vous pouvez l’imaginer cette méthode doit utiliser plus de mémoire puisque vous créez deux variables identiques.
Donc considérez cela comme un bout de scotch plus que comme une solution.


4 Responses to “PHP5 Indirect modification of overloaded property”
  1. juillet 29, 2011 a 4:00 , yann said:

    sympa ce petit design !! c’est tout nouveau si je ne m’abuse !!
    ca claque des fesses !!
    sinon, toujours sur le caillou

  2. juillet 29, 2011 a 4:06 , benjamin said:

    hehe et ue effectivement nouveau design ca fait super longtemps que je l’ai fait et intégré… il prenait la rouille… donc j’ai décidé de le mettre en ligne quand même. il faudra que je me remette a écrire des articles inintéressant aussi tiens :). ue toujours sur le caillou jusqu’à septembre.

  3. janvier 25, 2012 a 12:00 , Nico said:

    Salut, merci pour le post, ça m’a sauvé, solution toute simple et pourtant, que de blabla sur le problème dans d’autres forum !

  4. janvier 25, 2012 a 8:05 , benjamin said:

    Ravi d’entendre que ça t’ait aidé ! :)


Leave a Reply
Cliquez ici pour annuler la réponse.
Image CAPTCHA
Rafraîchir l'image
*

Pages
  • Contact
Abonnez-vous!

Recevez nos dernières nouvelles directement dans votre boîte de réception. Vous recevrez un email d'activation!