PHP 5.3 : Appels statiques dynamiques

23 octobre 2008php, php-5.3, static
 Cet article a été rédigé il y a plusieurs années et peut ne plus être tout à fait à jour…

Les exemples correspondant à ce point se trouvent dans le répertoire “dynamic-static-call”.

Imaginons la classe suivante, qui contient une méthode nommée methode[1], et une méthode statique nommée methodeStatique[2] :

class A {
    public static function methodeStatique($p1) {
        echo "<pre>A::methodeStatique($p1)</pre>";
    }
    public function methode($p1) {
        echo "<pre>A::method($p1)</pre>";
    }
}


Il nous arrive fréquemment, déjà en PHP <= 5.2 d’utiliser le type de syntaxe suivante, où nous appelons une méthode sans connaitre son nom au moment de l’écriture du script :

$className = 'A';
$methodName = 'methode';
$obj = new $className();
$obj->$methodName('param1');

Au moment de l’exécution de cette portion de code, la variable $methodName vaut methode, et c’est donc la méthode de ce nom qui est appelée, provoquant l’affichage suivant :

A::methode(param1)


Mais, en PHP <= 5.2, il n’est pas possible d’utiliser le même type de syntaxe pour un méthode statique.
Typiquement, si on prend la portion de code suivante :

$staticMethodName = 'methodeStatique';
$className::$staticMethodName('param1');

Nous obtenons, avec PHP <= 5.2, une parse error :

dynamic-static-call-5.2.png

En PHP 5.3, par contre, cet appel dynamique de méthode statique fonctionne, et nous obtenons l’affichage attendu[3] :

A::methodeStatique(param1)


Notes

[1] Non, pas original…

[2] Je vous avais dit : pas original !

[3] Du moins, l’affichage auquel nous aurions déjà eu tendance à nous attendre ^^

Vous avez apprécié cet article ? Faites-le savoir !

Ce blog a récemment été migré vers un générateur de sites statiques et je n'ai pas encore eu le temps de remettre un mécanisme de commentaires en place.

Avec un peu de chance, je parviendrai à m'en occuper d'ici quelques semaines ;-)