Pourquoi utiliser static à la place de self dans les classes PHP ?

10 Juillet 2019 à 18:30 Programmation

Comme vous j'ai longtemps utilisé le mot-clé self dans mes classes PHP jusqu'à me heurter à ses limites. Et là j'ai compris l'utilité de static à la place de self.

Voici une classe PHP tout ce qu'il y a de plus classique :

<?php

class Foo
{
    protected static $myStaticVar = 'foo';

    public function getMyStaticVar(): string
    {
        return self::$myStaticVar;
    }
}

Je peux donc récupérer ma valeur comme cela :

$foo = new Foo();
$foo->getMyStaticVar();

Jusque-là tout fonctionne correctement.

Mais si par exemple je souhaite étendre de ma classe Foo et changer la valeur de ma variable :

<?php

class Bar extends Foo
{
    protected static $myStaticVar = 'bar';
}

Le souci c'est que quand je vais l'appeler comme cela :

$bar = new Bar();
$bar->getMyStaticVar();

Il va me retourner foo et non bar.

Pourtant j'ai bien redéfini ma valeur vous allez me dire. Et bien oui, mais le mot-clé self fait référence à la classe courante où est la méthode. Or, ma méthode getMyStaticVar n'est définie que dans la classe Foo et non Bar.
Par contre, si je remplace self par static dans ma méthode, PHP va bien de retourner bar car static fait référence à la classe et ses enfants.

Voilà pourquoi il est important de toujours utiliser static dans ses méthodes, sauf si le comportement souhaité est celui de self.

Demo

Demo avec self

Demo avec static

Source

Late Static Bindings (Résolution statique à la volée)

Articles liés

0 commentaire

Soyez le premier à commenter l'article.

Laisser un commentaire