PHP attend T_PAAMAYIM_NEKUDOTAYIM?

543

Quelqu'un en a-t-il un T_PAAMAYIM_NEKUDOTAYIM?

Peter Turner
la source
22
Parfois, c'est la façon dont PHP vous dit qu'il vous manque un signe $ ... par exemple, si vous écrivez _SESSION ["foo"] au lieu de $ _SESSION ["foo"]
Gonzo
131
hébreu pour double double colon, mais ... voir bugs.php.net/bug.php?id=14492 : "BTW, il y a une faute d'orthographe dans l'erreur d'analyse, ce devrait être T_PAAMAYIM_NEKUDATAYIM (en hébreu, le 'double' forme est juste le nom original + le suffixe 'ayim' et 'nekuda' est la forme unique ['nekudot' est la forme plurielle]). "
Wolfgang Fahl
66
@WolfgangFahl Je savais que cette erreur semblait erronée.
Peter Turner
14
@WolfgangFahl l'erreur d'orthographe n'est que le manquant u. Ça devrait l'être T_PAAMAYIM_NEKUDOTAYIM. ( PAAMAYIM= "deux fois", NEKUDOTAYIM= := "נקודותיים")
Tom
15
Quand j'ai vu cette erreur, j'ai juste regardé l'écran stupéfait pendant environ 30 secondes, puis j'ai éclaté de rire et je suis allé fumer une ciggarette: F 1+
n00b

Réponses:

343

Il s'agit de l'opérateur à deux points ::(voir la liste des jetons de l'analyseur ).

Gombo
la source
11
Pas vraiment. Testez celavar_dump(empty(TRUE))
machineaddict
1
@machineaddict Question / réponse incorrecte?
Gumbo
2
Non. Je viens d'ajouter une évaluation qui renvoie le même T_PAAMAYIM_NEKUDOTAYIM. Je l'ai trouvé par erreur.
machineaddict
6
@Web_Developer, la raison pour laquelle cela se produit est que si vous avez un foreach($cats as catseul caractère acceptable après le catpour une instruction syntaxiquement valide, c'est a ::, car cela vous permettrait de spécifier une propriété statique d'une classe appelée cat. Par exemple, si la catclasse a un membre statique public appelé $mouse, alors foreach($cats as cat::$mouse)est parfaitement valide php, mais une déclaration avec autre chose ::qu'après le catserait une erreur de syntaxe. Si vous $mousen'étiez pas une propriété déclarée, catvous obtiendriez une erreur fatale, mais toujours pas une erreur de syntaxe.
chiliNUT
2
var_dump (vide (TRUE)), il suffit de renvoyer bool (false) en PHP 7.2
Programmeur Dancuk
109

Google fait des merveilles.

C'est l' hébreu pour "double colon".

patricksweeney
la source
3
@MattiVirkkunen Qu'en est-il d'une nouvelle langue qui accepte toute erreur, commet, syntaxe dans n'importe quelle langue? :) on peut le faire.
Hector
2
Google m'a amené ici.
Sumit
2
les israéliens ont écrit php :)
sd1sd1 le
@ sd1sd1, oui, c'est probablement Zeev qui a écrit ça
peterchaula
53

C'est un nom pour l' ::opérateur en PHP. Cela signifie littéralement "double colon". Pour une raison quelconque, ils l'ont nommé en hébreu. Vérifiez la syntaxe de votre code et mettez-en un le ::cas échéant :-)

Ilya Birman
la source
1
Les fonctions sont en anglais, mais cette erreur est en hébreu. Je ne sais pas si d'autres erreurs sont en hébreu.
alex
19
La chaîne de surbrillance est להדגיש מחרוזת. À partir de maintenant, je n'utiliserai ma fonction array_push personnalisée לדחוף_מערך qu'en caractères hébreux, bien sûr. Je suis sûr que tous mes collègues qui ne parlent pas l'hébreu vont l'adorer. Presque toute notre équipe de développement parle au moins une langue écrite en caractères non latins. Ça devrait être amusant :)
Isaac
3
La raison pour laquelle il est en hébreu est parce que le code a été écrit par des Israéliens. Je ne pense pas qu'ils aient raté cette erreur, ils l'ont laissée non traduite pour rappel.
Raul
5
@Raul Ok, donc sur mon prochain projet j'écrirai du code d'erreur en italien, je suis italien! Qu'attendez-vous, l'anglais partout? :-)
Gianluca Ghettini
@Ilya Birman Cela ne signifie pas littéralement "double colon"; cela signifie littéralement "deux fois, deux points"
Sapphire_Brick
47

De Wikipédia :

En PHP, l'opérateur de résolution de portée est également appelé Paamayim Nekudotayim (hébreu: פעמיים נקודתיים), ce qui signifie «double colon» en hébreu.

Le nom "Paamayim Nekudotayim" a été introduit dans le moteur israélien Zend Engine 0.5 utilisé en PHP 3. Bien qu'il ait été source de confusion pour de nombreux développeurs qui ne parlent pas l'hébreu, il est toujours utilisé en PHP 5, comme dans cet exemple de message d'erreur :

$ php -r :: Erreur d'analyse: erreur de syntaxe, T_PAAMAYIM_NEKUDOTAYIM inattendu

Depuis PHP 5.4, les messages d'erreur concernant l'opérateur de résolution de portée incluent toujours ce nom, mais ont quelque peu clarifié sa signification:

$ php -r :: Erreur d'analyse: erreur de syntaxe, inattendu '::' (T_PAAMAYIM_NEKUDOTAYIM)

De la documentation officielle PHP :

L'opérateur de résolution d'étendue (également appelé Paamayim Nekudotayim) ou, en termes plus simples, le double signe deux points, est un jeton qui permet d'accéder aux propriétés ou méthodes statiques, constantes et remplacées d'une classe.

Lorsque vous référencez ces éléments en dehors de la définition de classe, utilisez le nom de la classe.

Depuis PHP 5.3.0, il est possible de référencer la classe à l'aide d'une variable. La valeur de la variable ne peut pas être un mot-clé (par exemple self, parent et static).

Paamayim Nekudotayim semblerait, au premier abord, un choix étrange pour nommer un double-colon. Cependant, lors de l'écriture du Zend Engine 0.5 (qui alimente PHP 3), c'est ce que l'équipe Zend a décidé de l'appeler. Cela signifie en fait double-colon - en hébreu!

John Slegers
la source
1
C'est en fait de l'hébreu familier. Wikipédia dit maintenant: "En PHP, l'opérateur de résolution de portée est également appelé Paamayim Nekudotayim (hébreu: פעמיים נקודותיים, prononcé [paʔaˈmajim nəkudoˈtajim], le deuxième mot une corruption familière de נקודתיים, prononcé [nəkudaˈtajim]), qui signifie [nəkudaˈtajim]] "En hébreu".
micro
11

Cela arrive également lorsque vous appliquez une constante en PHP à la fonction empty ():

if (!empty(SOME_CONSTANT)) {

}

C'était mon cas. Je l'ai résolu en utilisant ceci:

$string = SOME_CONSTANT;
if (!empty($string)) {

}
Max
la source
2
Pourquoi une constante serait-elle vide?
Ne paniquez pas
1
Nice Question: C'est juste par exemple si d'autres se sont retrouvés dans cette situation d'erreur, je montre simplement que ce sera également possible :)
Max
6
@ Ne paniquez pas: pourquoi pas? empty () teste non seulement si une variable existe, mais aussi si sa valeur est "empty" (dans le cas de PHP, un zéro (0) est également vide). Une telle constante pourrait représenter une valeur qui est censée être modifiée par des paramètres de base de données de type utilisateur ou certaines valeurs vraies / fausses et d'autres types de valeurs que le développeur de code ne connaît pas au moment de la conception. Ceci est courant pour les API ou les frameworks de code. Je ne comprends tout simplement pas pourquoi les développeurs de l'analyseur Zend n'ont pas utilisé un mot commun que tout le monde connaît et comprend, mais plutôt des mots hébreux. Je veux dire, ce n'est même pas vraiment drôle.
StanE
J'utilise des constantes dans les fichiers de configuration, et je veux savoir dans le code si une constante spécifique est vide (null, false, 0, chaîne vide, tableau emty ....). Dois-je tester chacun d'eux manuellement? WTF
qdev
6

Je connais assez bien l'hébreu, donc pour clarifier le nom de "Paamayim Nekudotayim" pour vous, le sens paraphrasé est "double colon", mais traduit littéralement:

  • "Paamayim" signifie "deux" ou "deux fois"
  • "Nekudotayim" signifie "points" (littéralement "trous")
    • Dans la langue hébraïque, un nekuda signifie un point.
    • Le pluriel est nekudot , c'est-à-dire les points qui agissent comme les voyelles en anglais.
    • La raison pour laquelle pourquoi on l'appelle Nekudo- tayim est parce que le suffixe « -ayim » signifie aussi « deux » ou « deux fois », mais cela signifie généralement deux objets plutôt que deux actions, ce qui ::signifie « deux fois, deux points », ou plus communément appelé Opérateur de résolution d'étendue .
Sapphire_Brick
la source
2

Cela peut se produire sur foreachs lors de l'utilisation de:

foreach( $array as $key = $value )

au lieu de

foreach( $array as $key => $value )
GDY
la source
1

Pour moi, cela s'est produit dans une fonction de classe.

En PHP 5.3 et supérieur $this::$defaults a bien fonctionné; lorsque j'ai échangé le code sur un serveur qui, pour une raison quelconque, avait un numéro de version inférieur, il a jeté cette erreur.

La solution, dans mon cas, était d'utiliser le mot-clé selfau lieu de $this:

self::$defaults fonctionne très bien.

bozdoz
la source
At - il demandé au sujet $this, ou ce qui est arrivé à vous ?
Sapphire_Brick