$this vs &$this

Lorsque vous programmez dans WordPress, il arrivera tôt ou tard un moment où vous devrez associer une fonction de rappel à un hook.

Plusieurs syntaxes sont utilisées pour y arriver. Mais laquelle choisir ?

▼Publicité

Généralement, l'association se fera à l'aide d'une instruction sous la forme suivante :

PHP

add_action( 'nom_du_hook', 'fonction_de_rappel' );

Pourtant, lorsque vous recherchez des extraits de code sur Internet, vous rencontrez parfois des extraits sous cette forme :

PHP

add_action( 'nom_du_hook', array( $this, 'fonction_de_rappel' ) );

ou encore :

PHP

add_action( 'nom_du_hook', array( &$this, 'fonction_de_rappel' ) );

La syntaxe utilisant un array est nécessaire lorsque la fonction de rappel est définie dans une classe. Il fallait en effet trouver moyen de préciser à la fois le nom de la fonction et l'objet sur lequel la fonction doit être appliquée. C'est pourquoi on utilise un tableau (array) dont le premier élément correspond à l'objet courant ($this) et dont le second élément correspond au nom de la fonction de rappel.

Mais pourquoi y a-t-il une parfois esperluette (&) devant le $this ?

Il faut savoir qu'en PHP, l'ajout d'une esperluette devant une variable signifie que la variable doit être passée par référence.

La structure &$this est un héritage de PHP 4 puisque dans cette version, les objets étaient passés par valeur et non par référence. 

La documentation officielle de PHP confirme ce fait : « en PHP 4, il était nécessaire d'utiliser une référence pour créer une fonction de rappel qui pointe vers un objet, et non une copie de celui-ci ».

Depuis PHP 5, les objets sont toujours passés par référence. Il n'est donc plus utile de précéder leur nom par une esperluette.

La bonne syntaxe pour associer une fonction de rappel définie dans une classe est donc la suivante :

PHP

add_action( 'nom_du_hook', array( $this, 'fonction_de_rappel' ) );

Pour plus d'information

« Fonctions de rappel / Types Callable ». PHP. http://php.net/manual/fr/language.types.callable.php

« &$this ». Tom J. Nowell. http://tomjn.com/2014/01/08/this/

« &$this in WordPress add_action callback ». Stack overflow. http://stackoverflow.com/questions/21766137/this-in-wordpress-add-action-callback

Merci de partager ! Share on FacebookTweet about this on TwitterShare on Google+Share on LinkedInPin on PinterestShare on StumbleUponEmail this to someone
Catégories