Annotation de classe @after_transform
-
/** * @after_transform * @after_transform afterTransform * @after_transform Another_Class::afterTransform * @after_transform self::afterTransform * @after_transform static::afterTransform */ class A_Class
Appelle la méthode nommée après chaque transformation de la classe d’un objet via la méthode Transformable::transform.
L’annotation doit être définie dans la classe destination de la transformation, et pas dans la classe de l’objet Transformable source. La classe source doit être Transformable, la classe destination doit être annotée.
Cette méthode peut être dans la même classe, ou dans une classe tierce.- Si la méthode est dans la même classe, elle est appelée dans le contexte de l’objet transformé, dans sa classe de destination.
- Si la méthode est dans une classe tierce, il doit s’agir d’une méthode statique dont le premier argument sera l’objet résultant de la transformation.
- Dans les deux cas la méthode doit être publique.
Si aucun nom de méthode n’est précisé, c’est la méthode
afterTransform
de la classe destination qui sera appelée.Plusieurs annotations peuvent être appliquées à la même classe : les méthodes seront appelées les unes après les autres après la transformation.
Paramètres de la méthode appelée
Appel dynamique (méthode dans la classe destination) :
$source_object
: l’objet avant transformation.
Appel statique :
$object
: pour l’appel d’une méthode statique, l’objet obtenu après transformation.
$source_object
: le second argument est l’objet avant transformation.
Valeur de retour de la méthode appelée
Si la méthode appelée retourne :
null
: la transformation annulée et la méthode transform renverranull
au lieu de l’objet transformé.
La chaîne d’appels aux méthodesafter_transform
est interrompue si d’autres méthodes restaient à appeler.
false
: La transformation est maintenue et l’objet transformé sera renvoyé.
Toutefois la chaîne d’appels aux méthodesafter_transform
est interrompue si d’autres méthodes restaient à appeler.
- Toute autre valeur de retour sera sans effet.
Exemple
namespace Nickname\Project; use ITRocks\Framework\Tools\Names; class Source_Class { use Has_Name; use Transformable; } /** * @after_transform */ class Destination_Class { use Has_Name; /** * @var string */ public $information; /** * Called after transformation * @param $source_object object */ public function afterTransform($source_object) { $this->information = $this->name . ' transformed from ' . Names::classToDisplay(get_class($source_object)); } } $source = new Source_Class(); $source->name = 'Paul'; $destination = $source->transform(Destination_Class::class); echo $destination->information; # Affichera 'Paul transformed from source class'