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.
sympa ce petit design !! c’est tout nouveau si je ne m’abuse !!
ca claque des fesses !!
sinon, toujours sur le caillou
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.
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 !
Ravi d’entendre que ça t’ait aidé ! :)