Annotation de propriété @getter

Redirigé depuis @getter

/**
 * @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 “getter”.

Si aucun nom de méthode getter n’est indiqué, c’est la méthode getProperty qui sera implicitement considérée comme getter. Remplacer Property dans le nom de la méthode par le nom de votre 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 sera getPropertyName() .

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 votre 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, vous ne pourrez pas l’utiliser ici, préférez $value dans ce cas.
  • $object : l’objet qui comporte la propriété. Notamment utile si vous faites appel à une méthode externe à votre 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 getHash
	 * @var string
	 */
	public $hash;
 
	/**
	 * Gets $hash, or calculate it from content if not set
	 *
	 * @return string
	 */
	private function getHash()
	{
		if (!isset($this->hash)) {
			$this->calcHash();
		}
		return $this->hash;
	}

Utilisation :
La méthode getHash() 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 de getHash().

Montrer l'historique