Méthode et propriétés statique

Résumé Support Quiz

Dans ce chapitre, nous allons voir le principe des méthodes et propriétés statiques en PHP. C'est une notion un peu particulière, mais elle peut être utile pour mieux organiser du code qui n'a pas besoin de dépendre d'une instance précise.

L'idée générale est simple : certaines fonctions manipulent uniquement les paramètres qu'on leur donne et n'ont pas besoin de stocker un état propre à un objet. Dans ce cas, on peut les ranger dans une classe et les appeler directement depuis cette classe, sans passer par new.

Le problème des fonctions globales

Quand une application grandit, on peut rapidement se retrouver avec beaucoup de fonctions globales dans un fichier functions.php. Même si ces fonctions fonctionnent correctement, elles finissent par être mélangées, ce qui rend le code plus difficile à parcourir.

Les méthodes statiques permettent de regrouper ces fonctions par thématique dans des classes dédiées. On garde ainsi un nommage plus clair et une meilleure organisation.

<?php class Form { public function checkbox(string $name, string $value = null, array $data = []): string { // Génération du HTML... } }

Dans cet exemple, la méthode est une méthode classique. Pour l'utiliser, il faut d'abord créer une instance de la classe.

$form = new Form(); echo $form->checkbox('demo');

Si la méthode n'utilise aucune propriété propre à l'instance, cette instanciation n'apporte pas grand-chose. C'est précisément le type de situation où une méthode statique peut être intéressante.

Déclarer une méthode statique

Pour déclarer une méthode statique, on ajoute le mot-clé static après public.

<?php class Form { public static function checkbox(string $name, string $value = null, array $data = []): string { // Génération du HTML... } }

Une méthode statique s'appelle directement depuis la classe avec l'opérateur ::.

echo Form::checkbox('demo');

On n'a plus besoin de créer une instance avec new. Le résultat peut être le même, mais l'appel exprime mieux l'intention : on utilise une méthode rangée dans une classe, sans manipuler un objet qui possède son propre état.

Déclarer une propriété statique

Le principe fonctionne aussi avec les propriétés. Une propriété statique appartient à la classe plutôt qu'à une instance précise.

<?php class Form { public static $class = 'form-control'; }

Depuis l'extérieur de la classe, on peut récupérer cette propriété avec le nom de la classe, ::, puis le nom de la propriété précédé de $.

echo Form::$class;

Cela peut servir à centraliser une valeur partagée par plusieurs méthodes statiques. Si cette valeur change, toutes les méthodes qui l'utilisent peuvent bénéficier du changement au même endroit.

Utiliser self dans une classe

À l'intérieur d'une méthode statique, on n'utilise pas $this, car $this représente une instance courante. Or, dans un appel statique, il n'y a pas d'instance.

Pour faire référence à la classe elle-même, on utilise self.

<?php class Form { public static $class = 'form-control'; public static function checkbox(string $name, string $value = null, array $data = []): string { return '<input type="checkbox" class="' . self::$class . '" name="' . $name . '" value="' . $value . '">'; } }

self::$class permet ici d'accéder à la propriété statique définie dans la classe. C'est la différence importante à retenir :

  • $this->propriete sert à accéder à une propriété d'instance.
  • self::$propriete sert à accéder à une propriété statique de la classe.

Dans la transcription, un point d'attention est aussi mentionné avec l'interpolation : PHP ne gère pas toujours directement ce type d'accès statique dans une chaîne. Dans ce cas, on peut passer par une variable intermédiaire ou utiliser la concaténation.

Regrouper les méthodes par thématique

L'intérêt principal du statique, dans ce chapitre, est l'organisation. On peut regrouper dans une classe plusieurs méthodes liées à la même thématique, puis les appeler directement depuis cette classe.

<?php class Form { public static $class = 'form-control'; public static function checkbox(string $name, string $value = null, array $data = []): string { // Génération d'une checkbox... } public static function radio(string $name, string $value = null, array $data = []): string { // Génération d'un bouton radio... } public static function select(string $name, array $options, $value = null): string { // Génération d'un select... } }

On peut ensuite appeler chaque méthode avec la même logique :

echo Form::checkbox('demo'); echo Form::radio('demo'); echo Form::select('demo', []);

Cela évite d'avoir toutes les fonctions au même niveau global. Le nom de la classe sert de point d'entrée et indique immédiatement à quelle thématique appartient la méthode.

Modifier une valeur partagée

Une propriété statique peut aussi servir à modifier un comportement commun à plusieurs méthodes.

Form::$class = 'custom-control'; echo Form::checkbox('demo'); echo Form::radio('demo');

Si les méthodes utilisent self::$class, elles utiliseront toutes la nouvelle valeur. Cela permet de centraliser certaines informations partagées par les méthodes de la classe.

À retenir

Les méthodes statiques sont utiles quand une méthode n'a pas besoin d'une instance pour fonctionner. Elles permettent d'appeler directement une méthode depuis une classe avec ::.

Elles ne remplacent pas les objets classiques, mais elles offrent une solution pratique pour organiser des fonctions liées à une même thématique. Si une méthode dépend de valeurs propres à chaque objet, on utilisera plutôt des propriétés et méthodes d'instance. Si elle ne dépend que de ses paramètres ou d'une configuration commune à la classe, le statique peut être adapté.

Ressources

Pour aller plus loin, vous pouvez consulter la documentation officielle PHP sur le mot-clé static.