web-dev-qa-db-fra.com

PHP & sensibilité à la casse

En PHP, les noms de variables et de constantes sont sensibles à la casse, contrairement aux noms de fonctions.

Pour autant que je sache, PHP est le seul langage dans lequel cela se produit. Tous les autres langages que j'ai utilisés sont totalement sensibles à la casse ou totalement insensibles à la casse.

Pourquoi PHP partiellement sensible à la casse?

Veuillez noter que je ne demande pas quels noms sont sensibles à la casse, mais pourquoi .

Mise à jour

J'ai pensé que je pourrais ajouter, pour le bénéfice de ceux qui pensent que je demande qui , la liste suivante:

sensible à la casse

  • Cordes
  • Variables
  • Propriétés des objets
  • Constantes, par défaut

insensible à la casse

  • Mots clés etc
  • Les fonctions
  • Méthodes d'objet
  • Constantes, si définies en conséquence
  • Noms de classe

Remarque:

  • Les classes sont donc un sac mixte:
    • Le mot clé class est insensible à la casse
    • Les noms de classe ne respectent pas la casse, pour la déclaration, l'instanciation et les appels statiques
    • Les méthodes de classe, étant des fonctions, ne sont pas sensibles à la casse
    • Les propriétés de classe, étant des variables et des constantes, sont sensibles à la casse
  • Étant donné que les chaînes sont sensibles à la casse, tout ce qui repose sur des chaînes, telles que les clés et les valeurs de tableau, est également sensible à la casse
35
Manngo

Pourquoi PHP est-il partiellement sensible à la casse?

Je ne peux que spéculer que cela provient de versions très anciennes, probablement PHP/FI 2.0. Le manuel indique explicitement:

Gardez à l'esprit que les noms de fonction PHP/FI ne sont pas sensibles à la casse.

La plupart des entrées utilisateur, telles que GET et POST, ont toujours été enregistrées en tant que variables globales à l'époque. Les traiter comme étant insensibles à la casse aurait probablement causé des problèmes et, par conséquent, toutes les variables auraient été traitées comme étant sensible à la casse.

D'après ce que je peux dire, ce sont les seuls types d'identifiants en PHP/FI 2.0. Tous les autres ont été introduits plus tard, imitant apparemment les noms de fonction insensibles à la casse.

Les constantes, qui sont spéciales, n'ont été introduites qu'à partir de PHP 4 (le manuel PHP mentionne les "constantes", mais elles sont aujourd'hui appelées "littérales"). Pour une raison mystérieuse (peut-être qu'aucun consensus n'a pu être trouvé), il avait été décidé de permettre aux identifiants constants d'être define() d soit sensibles à la casse ou insensibles à la discression des développeurs. Fait intéressant, tandis que define() par défaut pour les constantes sensibles à la casse, les homologues C respectifs (REGISTER_*_CONSTANT) par défaut à la casse.

9
cmb

Respect de la casse (à la fois défini par l'utilisateur et PHP défini)

  • les variables
  • constantes
  • clés de tableau
  • propriétés de classe
  • constantes de classe

Insensible à la casse (défini par l'utilisateur et PHP défini)

  • les fonctions
  • constructeurs de classe
  • méthodes de classe
  • mots-clés et constructions (if, else, null, foreach, echo etc.)

Dans php.net

Bases

Les variables en PHP sont représentées par un signe dollar suivi du nom de la variable. Le nom de la variable est sensible à la casse.

Les noms de variables suivent les mêmes règles que les autres étiquettes en PHP. Un nom de variable valide commence par une lettre ou un trait de soulignement, suivi d'un nombre quelconque de lettres, de chiffres ou de traits de soulignement. En tant qu'expression régulière, elle s'exprimerait ainsi: '[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*'


Quelques liens utiles

  1. Guide de nommage Userland
  2. Pourquoi les fonctions et méthodes de PHP ne respectent-elles pas la casse?
  3. Les fonctions PHP sont-elles sensibles à la casse?
  4. Les PHP mots-clés sont-ils sensibles à la casse?
  5. = PHP les noms de fonction sont-ils sensibles à la casse ou non?
  6. Source de PHP sensible à la casse
30
Abdulla Nilam

sensible à la casse

variables, constantes, clés de tableau, propriétés de classe, constantes de classe

insensible à la casse

fonctions, constructeurs de classe, méthodes de classe, mots-clés et constructions (if, else, null, foreach, echo etc.)

0
Abhishek Sharma