Annotation de propriété @getter
-
Redirected from Getters
/** * @getter * @getter getProperty * @getter Another_Class:getProperty * @getter self::getProperty * @getter static::getProperty */ public $property;
L’annotation @getter, appliquée à une propriété, permet de demander l’appel d’une méthode à chaque fois que le programme veut lire la valeur de la propriété. Le résultat de la lecture sera défini non pas par la valeur réelle de la propriété, mais par le résultat de l’appel à cette méthode
getProperty()
.Si aucun nom de méthode getter n’est indiqué, c’est la méthode
getProperty()
qui sera implicitement considérée comme getter. RemplaceProperty
dans le nom de la méthode par le nom de la propriété, normalisé en nom de méthode. Autre exemple : pour une propriété$property_name
, le nom de la méthode getter par défaut seragetPropertyName
.Paramètres de la méthode appelée
La méthode appelée peut prendre différents paramètres (peu importe l’ordre, le nom permettra d’identifier le paramètre souhaité) :$value
ou$nom_propriete
(remplacer par le nom de la propriété), contenant la valeur de la propriété associée au getter. Si$nom_propriete
est un nom réservé pour les paramètres parmi ceux de cette liste, elle ne pourra pas être utilisée ici, préférer$value
dans ce cas.$object
: l’objet qui comporte la propriété. Notamment utile en cas d’appel à une méthode externe à l’objet.$property
: la propriété dont on souhaite lire la valeur, objet de classe Reflection_Property.$property_name
: le nom de la propriété lue.$stored
: la valeur de la propriété telle que stockée dans l’objet. Ce paramètre peut être passé par référence : si la valeur est modifiée, c’est la valeur stockée de la propriété qui sera modifiée.$type
: le type de la propriété lue, objet de classe Type (peut représenter un tableau).element_type
: le type élémentaire de la propriété lue, objet de classe Type (représentera le type de l’élément si la propriété est de type tableau []).$type_name
: le nom du type de la propriété lue, valeur de l’annotation var (peut contenir les caractères []).$element_type_name
: le nom de l’élément pour la propriété lue, valeur de l’annotation var (sans [] si multiple).$class_name
: le nom de la classe pour la propriété lue, valeur de l’annotation var (sans [] si multiple).$joinpoint
: le point de jointure de classe Read_Property, à usage interne, les getters étant gérés par le module AOP du Framework.
Valeur de retour de la méthode appelée
Si la méthode appelée retourne une valeur, cette valeur sera le résultat de la lecture de la propriété dans la ligne de programme appelant, à la place de la véritable valeur de la propriété.
Exemple
La classe File du framework propose de stocker les informations concernant un fichier enregistré sur le disque dur. La propriété
$hash
notamment permet de stocker le hashcode du fichier (somme de contrôle permettant d’identifier le fichier avec une forte probabilité d’unicité). Tant que cette propriété n’a pas été consultée, l’empreinte de hash n’est pas calculée. Ce calcul n’aura lieu que la première fois où la propriété est consultée. On implémente pour cela un getter qui calcule la clé de hachage si elle n’est pas déjà définie.class File { /** * @getter * @var string */ public $hash; /** * Gets $hash, or calculate it from content if not set * * @return string */ protected function getHash() { if (!isset($this->hash)) { $this->calcHash(); } return $this->hash; }
Utilisation :
La méthodegetHash()
sera appelée à chaque fois qu’une ligne de code veut consulter la propriété$hash
. Le résultat de cette consultation sera la valeur de retour degetHash()
.