Formation PUB010 : PHP, 2022 Notions de programmation appliquées au PHP

10.17 $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.

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 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

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

Veuillez noter que le contenu de cette fiche vous est partagé à titre gracieux, au meilleur de mes connaissances et sans aucune garantie.
Par Christiane Lagacé
Dernière révision le 5 mars 2021
Merci de partager !

Site fièrement hébergé chez A2 Hosting.

Soumettre