AOP\Weaver::beforeMethod
-
public function beforeMethod(callable $joinpoint, callable $advice) : Handler
Description
Déclare un greffon
$advice
qui sera appelé avant chaque appel au point de coupe$joinpoint
.Le tissage des aspects doit être réalisé dans la méthode register d’un plugin Registerable.
Liste de paramètres
callable $joinpoint
La méthode – ou point de coupe – avant laquelle on souhaite appeler le greffon.
callable $advice
La méthode, statique ou dynamique – ou greffon -, à appeler avant le point de coupe.
Le greffon peut recevoir les mêmes paramètres que le point de coupe, ceux-ci étant reconnu à leur nom, à l’exception de ces paramètres réservés :mixed $result
: passé par référence et originellement valeur ànull
, vous pouvez modifier ici la valeur de retour du point de coupe.object $object
: l’objet contexte du point de coupe.Before_Method $joinpoint
: Le point de jointure Before_Method comporte toutes les données concernant le point de coupe.
Si le greffon retourne une valeur, celle-ci remplacera la valeur de retour du point de coupe.
Valeur de retour
La méthode retourne un ITRocks\Framework\AOP\Weaver\Handler, objet représentant l’aspect, qui pourra servir par la suite à consulter les informations concernant le point de coupe ou à annuler l’aspect avec la méthode remove().
Limitations
A l’heure actuelle, un greffon ne peut pas être :- une fonction
- un callable
[$object, 'methodName']
, le seul objet accepté ici est$this
(voir exemple).
Exemples
Vous trouverez le code source complet de ces exemples dans l’application Examples.
Différents exemples d’aspects utilisant
beforeMethod
:<?php namespace ITRocks\Examples\AOP; use ITRocks\Framework\Plugin\Register; use ITRocks\Framework\Plugin\Registerable; class Plugin implements Registerable { public function pluginAdvice() { echo '- plugin advice called '; } public static function selfAdvice() { echo '- self advice called '; } public static function staticAdvice() { echo '- static advice called '; } /** * @param $register Register */ public function register(Register $register) { $aop = $register->aop; $aop->beforeMethod( [Example::class, 'exampleMethod'], [My_Aspect::class, 'staticAdviceMethod'] ); $aop->beforeMethod( [Example::class, 'exampleMethod'], [$this, 'pluginAdvice'] ); $aop->beforeMethod( [Example::class, 'exampleMethod'], [__CLASS__, 'selfAdvice'] ); $aop->beforeMethod( [Example::class, 'exampleMethod'], [get_class($this), 'staticAdvice'] ); } }
Le code de la classe
Example
. Il pourrait également s’agit d’une interface ou d’un trait :
<?php namespace ITRocks\Examples\AOP; class Example { public function exampleMethod() { echo '- example method called '; } }
Le code de la classe
My_Aspect
:
<?php namespace ITRocks\Examples\AOP; class My_Aspect { public static function staticAdviceMethod() { echo '- static advice method called '; } }
Le plugin
Plugin
doit être activé dans le fichier de configuration config.php.Avec cet exemple, tout appel à
Example::exampleMethod()
provoquera cet affichage :
- static advice method called - plugin advice called - self advice called - static advice called - example method called
Voir aussi