Fonctions anonymes et $this
Posté : 12 juil. 2010, 16:55
Tout content de l'ajout des fonction anonymes dans PHP 5.3 qui donnent une nouvelle dimension à la programmation avec des hooks, je suis tombé sur un os qui a pas mal calmé mes ardeurs.
Voilà un exemple pour le contexte (voir la suite).
http://www.php.net/manual/en/functions. ... .php#98384
Voilà un exemple pour le contexte (voir la suite).
class Test
{
protected $myVar = 42;
public function __construct()
{
// Juste pour donner un exemple de fonction nécessitant un callback
preg_replace_callback('#world#', function($matches)
{
var_dump($this->myVar); // Il ne connait pas $this
}, 'hello world');
}
}
Dans ma jolie fonction anonyme j'ai besoin d'accéder à mon objet Test (donc en utilisant $this), qu'à cela ne tienne il suffit d'utiliser le mot clef use comme ceci :
preg_replace_callback('#world#', function($matches) use($this)
{
var_dump($this->myVar); // Erreur PHP
}, 'hello world');
Sauf que ça ne fonctionne pas. PHP n'aime pas ce $this, nouvel essai donc en assignant par référence $this à une autre variable :
$self = $this;
preg_replace_callback('#world#', function($matches) use($self)
{
var_dump($self->myVar); // Ne peut pas lire la propriété car protégée
}, 'hello world');
Ca fonctionne quasiment ... si on enlève les soucis de portée ! En effet, exit les propriétés / méthodes protégées et privées ... Bref c'est une mauvaise surprise, qui sera réglée rapidement je l'espère. En attendant, j'ai trouvé une astuce sur un commentaire php.net, d'où la présence de ce sujet, pour la partager, dans le cas rare ou vous tomberiez sur le même os que moi :http://www.php.net/manual/en/functions. ... .php#98384