Discussion:
A propos des noms de fonctions possibles
(trop ancien pour répondre)
warpdesign
2008-12-09 14:44:33 UTC
Permalink
Bonjour,

En utilisant Eclipse/PDT, je suis tombé sur un petit soucis concernant
le nom des fonctions acceptés par le PHP.

D'après documentation officielle, on peut lire: (cf. http://www.php.net/functions)

Les noms de fonctions suivent les mêmes règles que les autres labels
en PHP. Un nom de fonction valide commence par une lettre ou un
souligné, suivi par un nombre quelconque de lettres, de nombres ou de
soulignés. Ces règles peuvent être représentées par l'expression
rationnelle suivante : [a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*.

Autrement dit, d'après ce qu'on peut lire en Français, le nom d'une
fonction doit commencer par une lettre ou un underscore, suivi d'une
lettre ou nombre quelquonque.

Or, un nom comme celui ci est valable selon l'expression régulière
indiquée:

function €()
{
echo 'toto';
}

Et cette fonction sera interprétée correctement par le PHP.

Cependant certains parsers (notamment PDT/Eclipse, retourneront une
parse error). J'aimerai savoir si ce nom de fonction est réellement
valide (auquel cas le soucis est du côté du parser de PDT/Eclipse), ou
si elle ne l'est pas mais est correctement interprétée par le PHP par
effet de bord (auquel cas le problème vient du PHP).

Merci! :)
Olivier Miakinen
2008-12-09 15:16:41 UTC
Permalink
Bonjour,
Post by warpdesign
D'après documentation officielle, on peut lire: (cf. http://www.php.net/functions)
Les noms de fonctions suivent les mêmes règles que les autres labels
en PHP. Un nom de fonction valide commence par une lettre ou un
souligné, suivi par un nombre quelconque de lettres, de nombres ou de
soulignés. Ces règles peuvent être représentées par l'expression
rationnelle suivante : [a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*.
Ok.
Post by warpdesign
Autrement dit, d'après ce qu'on peut lire en Français, le nom d'une
fonction doit commencer par une lettre ou un underscore, suivi d'une
lettre ou nombre quelquonque.
Oui. Plus précisément, par une lettre ASCII, un underscore, un code de
contrôle DEL, ou n'importe quel caractère non-ASCII (qu'il s'agisse
d'une lettre ou quoi que ce soit d'autre).
Post by warpdesign
Or, un nom comme celui ci est valable selon l'expression régulière
function €()
{
echo 'toto';
}
Oui, du moins dans les charsets les plus courants, par exemple
ISO-8859-15 (il est alors codé "\xa4") ou UTF-8 (où il est codé
"\xE2\x82\xAC"). À la limite, il est même valable du point de vue
de PHP dans un fichier en cp1252, codage de ton article auquel je
réponds : il est alors codé "\x80". Bien sûr, ce codage proprié-
taire est à éviter sur le web, de même que tu devrais l'éviter
dans les news en configurant ton nouvelleur comme il faut.
Post by warpdesign
Et cette fonction sera interprétée correctement par le PHP.
Oui.
Post by warpdesign
Cependant certains parsers (notamment PDT/Eclipse, retourneront une
parse error). J'aimerai savoir si ce nom de fonction est réellement
valide (auquel cas le soucis est du côté du parser de PDT/Eclipse), ou
si elle ne l'est pas mais est correctement interprétée par le PHP par
effet de bord (auquel cas le problème vient du PHP).
Je n'ai pas PDT/Eclipse alors je ne peux pas confirmer mon opinion, mais
si tu as déclaré un encodage Latin1 ou ISO-8859-1 et que tu saisisses un
€ cp1252, il est possible que ce soit pour cette raison qu'il te jette.
warpdesign
2008-12-10 13:16:44 UTC
Permalink
Post by Olivier Miakinen
Je n'ai pas PDT/Eclipse alors je ne peux pas confirmer mon opinion, mais
si tu as déclaré un encodage Latin1 ou ISO-8859-1 et que tu saisisses un
¤ cp1252, il est possible que ce soit pour cette raison qu'il te jette.
D'accord, je vais vérifier pour l'encodage, mais à priori c'est de
l'utf8.

Mais ce que j'aimerai savoir c'est si, hormis pour un soucis possible
d'encodage, un nom de fonction de ce genre est valide pour le PHP.

Je pense avoir rencontré un problème dans PDT/Eclipse, et tout le
monde se renvoie la balle en disant que le bug vient de l'autre côté..
ou de mon code. Et c'est énervant ;)
Olivier Miakinen
2008-12-11 20:31:25 UTC
Permalink
Post by warpdesign
Post by Olivier Miakinen
Je n'ai pas PDT/Eclipse alors je ne peux pas confirmer mon opinion, mais
si tu as déclaré un encodage Latin1 ou ISO-8859-1 et que tu saisisses un
€ cp1252, il est possible que ce soit pour cette raison qu'il te jette.
D'accord, je vais vérifier pour l'encodage, mais à priori c'est de
l'utf8.
Mais ce que j'aimerai savoir c'est si, hormis pour un soucis possible
d'encodage, un nom de fonction de ce genre est valide pour le PHP.
J'avais déjà répondu en fonction de la lecture de la doc. Maintenant,
voici le résultat d'un test (en UTF-8, avec PHP 5).

Code PHP :
-----------------------------------------------------------
function €()
{
echo "Début fonction €<br>\n";
echo "Fin fonction €<br>\n";
}
function é()
{
echo "Début fonction é<br>\n";
€();
echo "Fin fonction é<br>\n";
}
echo "<p>\n";
é();
echo "</p>\n";
-----------------------------------------------------------

Affichage :
-----------------------------------------------------------
Début fonction é
Début fonction €
Fin fonction €
Fin fonction é
-----------------------------------------------------------

Continuer la lecture sur narkive:
Loading...