T_PAAMAYIM_NEKUDOTAYIM : qu'est-ce que c'est et comment le corriger

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Vous avez croisé l'erreur mystérieuse T_PAAMAYIM_NEKUDOTAYIM ? Pas de panique !

\n\n

Si vous avez déjà codé en PHP et vu un message d'erreur comme PHP Parse error: syntax error, unexpected '::' (T_PAAMAYIM_NEKUDOTAYIM), vous savez à quel point cela peut être déroutant. Surtout quand on débute et qu'on tombe sur un mot hébreu. En réalité, derrière ce nom barbare se cache une chose simple : l'opérateur de résolution de portée (Paamayim Nekudotayim signifie "double deux-points" en hébreu).

\n\n

Dans ce tutoriel, nous allons voir pourquoi cette erreur survient, comment la corriger et comment l'éviter à l'avenir. Cet article s'inspire d'une vraie question sur Stack Overflow qui a cumulé des milliers de vues — preuve que le problème est courant.

\n\n

Qu'est-ce que T_PAAMAYIM_NEKUDOTAYIM ?

\n\n

En PHP, l'opérateur :: (double deux-points) est utilisé pour accéder aux propriétés statiques, méthodes et constantes d'une classe. Exemple :

\n\n
<?php\nclass MyClass {\n    public static $value = 42;\n    const PI = 3.14;\n    \n    public static function hello() {\n        return "Bonjour depuis une méthode statique !";\n    }\n}\n\n// Utilisation correcte de ::\necho MyClass::$value;  // Affiche 42\necho MyClass::PI;      // Affiche 3.14\necho MyClass::hello(); // Affiche "Bonjour depuis une méthode statique !"\n?>\n
\n\n

Tout va bien tant que vous respectez la syntaxe. L'erreur T_PAAMAYIM_NEKUDOTAYIM apparaît quand PHP rencontre :: dans un contexte inattendu ou quand ce qui le précède n'est pas une classe (par exemple, une variable).

\n\n

Les 5 causes les plus fréquentes de l'erreur

\n\n

Passons en revue les scénarios typiques qui déclenchent cette erreur. Chaque cas est illustré avec un exemple de code et sa correction.

\n\n

1. Utilisation de :: avec un objet au lieu d'une classe

\n\n

L'erreur la plus courante chez les débutants : essayer d'appeler une méthode statique via un objet avec :: au lieu de ->.

\n\n

Incorrect :

\n
<?php\nclass Calculator {\n    public static function add($a, $b) {\n        return $a + $b;\n    }\n}\n\n$calc = new Calculator();\necho $calc::add(5, 3); // Erreur ! PHP attend T_PAAMAYIM_NEKUDOTAYIM\n?>\n
\n\n

Correct :

\n
<?php\necho Calculator::add(5, 3); // Appel via la classe\n// Ou si la méthode n'est pas statique :\n// echo $calc->add(5, 3);\n?>\n
\n\n

Rappelez-vous la règle : pour les méthodes et propriétés statiques, utilisez :: avec le nom de la classe ; pour les méthodes normales, utilisez -> avec l'objet.

\n\n

2. Classe manquante ou nom de classe incorrect

\n\n

Parfois, vous écrivez :: mais PHP ne trouve pas la classe, car elle n'est pas déclarée ou vous avez fait une faute de frappe.

\n\n

Exemple d'erreur :

\n
<?php\necho SomeClass::doSomething(); // Fatal error: Class 'SomeClass' not found\n?>\n
\n\n

Comment corriger :

\n
    \n
  • Vérifiez que la classe est déclarée (ou incluse via require/include).
  • \n
  • Assurez-vous que le nom de la classe est correctement orthographié.
  • \n
  • Si la classe est dans un autre fichier, vérifiez le chemin d'accès.
  • \n
\n\n

3. Utilisation de :: avec une variable qui ne contient pas une classe

\n\n

Il arrive que vous tentiez d'accéder à une méthode statique via une variable, mais celle-ci ne contient pas une chaîne avec le nom de la classe, mais autre chose.

\n\n

Code problématique :

\n
<?php\nclass Logger {\n    public static function log($msg) {\n        echo "[LOG] $msg";\n    }\n}\n\n$className = 123; // C'est un nombre, pas une chaîne avec le nom de la classe\n$className::log("Test"); // Erreur !\n?>\n
\n\n

Solution : vérifiez toujours que la variable contient un nom de classe valide (une chaîne de caractères).

\n\n
<?php\n$className = 'Logger';                

Blogs

Book Recommendations