Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

A propos des noms de fonctions possibles

3 réponses
Avatar
warpdesign
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! :)

3 réponses

Avatar
Olivier Miakinen
Bonjour,

Le 09/12/2008 15:44, warpdesign a écrit :

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.

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).

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

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é
"xE2x82xAC"). À 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.

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



Oui.

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.
Avatar
warpdesign
> 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 ;)
Avatar
Olivier Miakinen
Le 10/12/2008 14:16, warpdesign a écrit :
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 é
-----------------------------------------------------------