nouveau charabia

Mammouth du PHP | 2278 Messages

28 juin 2011, 10:35

Je ne parle pas encore le sanscrit, le pracrit ou l'hindoustani, aussi ce magnifique message me laisse-t-il d'autant plus perplexe que ce n'est pas la parenthèse fermante qui est en trop, mais un nom de variable dont j'avais oublié le $:
foreach ($bidules as bidule)
{
}
Parse error: syntax error, unexpected ')', expecting T_PAAMAYIM_NEKUDOTAYIM in /var/www/htdocs/cohortes/repartir_avec_particularites.php on line 88
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Eléphant du PHP | 209 Messages

28 juin 2011, 10:54

T_PAAMAYIM_NEKUDOTAYIM c'est le double deux point (::)

foreach ($bidules as bidule)

bidule est un nom de classe, donc, comme il s'attend à trouvé un attribut, il pense que tu va lui indiquer via un double deux point (expecting T_PAAMAYIM_NEKUDOTAYIM) , or il trouve une parenthèse fermante ( unexpected ')' ) ...

En fait ... tu as juste oublié le $ devant bidule ...
--
Eric

Mammouth du PHP | 2278 Messages

28 juin 2011, 11:11

Je connais l'erreur puisque je l'ai moi-même signalée.
En revanche, on peut s'interroger SUR LE TEXTE (ça a l'air de dire que c'est une constante Texte non définie qui est remplacée par son identificateur)
expecting T_PAAMAYIM_NEKUDOTAYIM)
Par ailleurs, ne programmant pas en php objet, je vois mal comment je pourrais avoir un identificateur de classe...)
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

ViPHP
ViPHP | 2577 Messages

28 juin 2011, 11:38

Bonjour,

Généralement les erreurs de syntaxe ne sont pas très explicite.
Je soupçonne une optimisation de l'interprétation qui conduit à ne pas trop chercher à analyser les erreurs. En général je me contente de regarder autour de la ligne concernée. Avec l'habitude on finit par s'en sortir.

Eléphant du PHP | 209 Messages

28 juin 2011, 12:41

Mais enfin si c'est très explicite ....

Une des première phase c'est le découpage du programme en token ( un nom de variable, un opérateur, un nom de fonction, ...). Puis viens l'analyse lexicale dans laquelle php tente de voir si le programme que tu lui soumet est bien une phrase de sa grammaire.

Par exemple, tu ne peux pas avoir

for = { if echo ) ::

=> Ce n'est pas une phrase de PHP

Comment il le sait ? De manière très simple, il a un ensemble de règle dont la première est :
-> un programme PHP est un ensemble de texte ou de <?php code_php ?> répété autant de fois qu'on veux

ensuite, fatalement, on a une règle quelque part :

-> un element foreach, c'est le token "foreach", puis une expression puis le token "as", puis une de variable.

-> une variable c'est soit $xxx, soit un_nom_de_classe :: une_variable

Comme de manière évidente, ton code est réduit à utiliser un_nom_de_classe::une_variable, il trouve bien un_nom_de_classe et après ....
catastrophe : il trouve une ")" au lieu de "::" ... Comme c'est la dernière règle qu'il a essayé et qui n'a pas marché, il interromps brutalement
l'analyse et te dis ce qui c'est passé ....

Pour lire les message d'erreur, il y a un truc, tous ce qui commence par T_, c'est un token... Et comment on connait la liste des token ? ici -> http://www.php.net/manual/fr/tokens.php
Par ailleurs, ne programmant pas en php objet, je vois mal comment je pourrais avoir un identificateur de classe...)
class objet {
	
	public static $a;
	
}

$toto = array(1,2,3);

foreach($toto as objet::$a){
	echo objet::$a;	
}
--
Eric

Mammouth du PHP | 2278 Messages

28 juin 2011, 13:10

Je me demande si je parle français ou une langue inconnue de tous.
Je sais, pour en avoir écrit, comment fonctionne un analyseur syntaxique.
Je connais l'erreur puisque je l'ai moi-même signalée.
Je ne m'étonne que du texte d'erreur : T_PAAMAYIM_NEKUDOTAYIM)
dont je persiste à dire que c'est une constante Texte non définie qui est remplacée par son identificateur (tout simplement parce que Php semble préfixer ses textes de constantes par T_
Ce n'est pas que le texte du message ait une quelconque importance; il suffit de savoir à quelle ligne une erreur a été repérée, pour sortir sa bogoloupe... mais pour le principe un texte dans une langue connue serait nettement plus sympa...
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Eléphant du PHP | 209 Messages

28 juin 2011, 13:46

tout simplement parce que Php semble préfixer ses textes de constantes par T_
Ah bon ?

En fait, le problème, c'est peut être que tu ne parles pas hébreux ? http://fr.wikipedia.org/wiki/Paamayim_Nekudotayim
--
Eric

Mammouth du PHP | 2278 Messages

28 juin 2011, 20:13

Passionnante constatation!!!
Effectivement, je parle pas hébreux, quoique j'aie appris l'hébreu dans une autre vie.
Mais je persiste à affirmer que T_bidule, c'est surement une erreur de définition de constante.
Je suppose que ce n'est pas le seul mot hébreu, connu des seuls hébreux, qu'emploie ce langage, mais c'est la seule fois où je n'ai pas eu un message d'erreur en anglais ...
M.B.
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Eléphant du PHP | 209 Messages

29 juin 2011, 06:30

Je ne comprend absolument pas quel est ton problème et même s'il y en a un ...
Mais je persiste à affirmer que T_bidule, c'est surement une erreur de définition de constante.
J'ai essayer d'expliquer que T_bidule, c'est le token bidule, ce n'est pas un message d'erreur .... bidule n'est pas une constante.
Je suppose que ce n'est pas le seul mot hébreu
A ma connaissance, si... Au moins dans les nom de token.
--
Eric

Mammouth du PHP | 2278 Messages

29 juin 2011, 07:47

Le problème est qsu'il est fort choquant qu'on balance un mot hébreu comme explication d'une erreur, chacun sait que la communauté php est hébraïsante...
D'autant plus qu'il suffirait d'au moins 5 secondes pour modifier ce texte...
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

ViPHP
xTG
ViPHP | 7331 Messages

29 juin 2011, 08:01

Okay... Donc j'ai appris l'anglais pour mieux m'en sortir en informatique.
Maintenant je vais prendre des cours d'Hébreu.

Eléphant du PHP | 209 Messages

29 juin 2011, 10:40

Effectivment, vu que T_DOUBLE_COLON existe ...

There are two reasons this term will stay. It is a tip of the hat to
the amount of PHP work that came out of Israel, and it is a good
reminder that there are a lot of other languages in the world. People
whose first language is not English, myself included, are forced to work
with unfamiliar terms every day. I wouldn't mind having a few more
non-English identifiers in PHP actually.

Well, and a third reason, I like it.

-Rasmus
http://www.mail-archive.com/internals@l ... 48102.html
--
Eric

ViPHP
xTG
ViPHP | 7331 Messages

29 juin 2011, 12:18

Beh moi je suis pas pour un langage en français... Quand je vois ce qu'est le WLangage il y a de quoi se jeter la corde au cou...

ViPHP
ViPHP | 4039 Messages

29 juin 2011, 12:30

Pff, on voit bien que vous n'avez jamais travaillé sur du code avec des fonctions et des noms de variables en polonais. :twisted:

Je les ais même laissés, ça fait authentique. :mrgreen:
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Eléphant du PHP | 209 Messages

29 juin 2011, 13:57

Pff, on voit bien que vous n'avez jamais travaillé sur du code avec des fonctions et des noms de variables en polonais
J'ai vue roumain et ... chinois, mais uniquement dans les commentaires !
Beh moi je suis pas pour un langage en français...
Moi je suis pour, car je suis contre l'uniformité ! Donc vive les noms de token en hébreux.
--
Eric