PHP : c’est de l’hébreu…
…et ce n’est pas qu’une expression
Petite aventure qui m’est arrivée cette semaine. Je testais une nouvelle extension Yii lorsque, une fois installée sur mon serveur, j’obtiens ce message d’erreur en la testant :
Parse error: syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM
Woaou ! Je vous demande pardon ? Ca y-est, mon serveur devient dingue ou alors je suis dans un épisode de Fringe…
Après quelques recherches sur le net, en réalité, il s’avère que mon serveur n’y est pour rien (pas plus de Massive Dynamics). Il s’agissait en fait d’une petite erreur de syntaxe dans l’extension qui, si elle est exécutée sur un PHP avec APC activée (optimiseur de code), déclenche le dit message.
Explication :
Le message d’erreur est en hébreu, littéralement. Deux développeurs de PHP 3 et Zend Engine 0.5 (Zeev Suraski et Andi Gutmans) qui sont les auteurs du message en quetion sont d’origine israélienne. En traduisant, T_PAAMAYIM_NEKUDOTAYIM veut dire « Token double deux-points ». Initialement, il ne devait s’agir que d’un message à destination interne. Seulement voila, dans certaines conditions, le message fait surface.
En l’occurrence, dans mon cas, il s’agissait d’une mauvaise utilisation d’un accès à une méthode statique d’une classe. Pour les non-familiers avec le concept, un petit tour vers la documentation officielle s’impose. Par exemple dans Yii, pour ne pas être obligé d’instancer un nouvel objet AR, on peut accéder à la méthode model grace à la notation NomClasseAR::model() (notez les doubles deux-points). APC cependant ne semble pas trop apprécier le fait d’accéder à ces méthodes via une variable plutôt que directement via le nom de la classe (normalement supporté depuis PHP 5.3). Un code comme $model::model() (ou $model contient le nom de la classe) provoque le fameux message. Dans ce cas, pas le choix, il faut instancier un objet via new $model qui retourne le modèle en question.
Si les voyages forment la jeunesse, PHP forme aux langues étrangères


Commentaires récents