Lorsque vous programmez dans WordPress, il arrivera tôt ou tard un moment où vous devrez associer une fonction de rappel à un hook.
Généralement, l'association se fera à l'aide d'une instruction sous la forme suivante :
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 :
add_action( 'nom_du_hook', array( $this, 'fonction_de_rappel' ) );
ou encore :
add_action( 'nom_du_hook', array( , 'fonction_de_rappel' ) );
La syntaxe avec 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.
▼Publicité Le texte se poursuit plus bas
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 :
add_action( 'nom_du_hook', array( $this, 'fonction_de_rappel' ) );
« 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
Site fièrement hébergé chez A2 Hosting.