web-dev-qa-db-fra.com

Pourquoi les fonctions et méthodes de PHP ne respectent-elles pas la casse?

Les fonctions et méthodes de PHP ne sont pas sensibles à la casse comme illustré dans l'exemple suivant.

function ag()
{
    echo '2';
}

Ag();
class test {
    function clMe()
    {
        echo 'hi';
    }
}

$instance = new test;
$instance->clme();

Mais ce n'est pas le cas avec les variables. Quelle est la justification?

102
user198729

Permettez-moi de citer Interview - Créateur de PHP, Rasmus Lerdorf

La première version de PHP était un simple ensemble d'outils que j'ai mis en place pour mon site Web et pour quelques projets. Un outil a fait un peu de connexion de fantaisie dans une base de données mSQL, un autre a agi comme forme interprète de données. Je me suis retrouvé avec environ 30 petits programmes CGI différents écrits en C avant d'en avoir marre, et les ai tous combinés dans une seule bibliothèque C. J'ai ensuite écrit un analyseur très simple qui prendrait des balises dans les fichiers HTML et les remplacer par la sortie des fonctions correspondantes dans la bibliothèque C.

L'analyseur simple s'est lentement développé pour inclure des balises conditionnelles, puis des balises de boucle, des fonctions, etc. À aucun moment, je ne pensais que j'écrivais un langage de script. J'étais simplement en train d'ajouter un peu de fonctionnalités à l'analyseur de remplacement de macro. J'écrivais toujours toute ma vraie logique métier en C.

J'ai lu quelque part que puisque toutes les fonctions introduites ressemblaient essentiellement à des balises dans un document HTML et que les balises HTML étaient insensibles à la casse, il a choisi les noms de fonctions en PHP pour être insensibles à la casse. Plus tard dans cette fonctionnalité est resté dans la langue.

90
Shailesh Kumar

Oui, les noms de fonctions et de méthodes ne sont pas sensibles à la casse.

Et oui, les noms de variables sont sensibles à la casse.

Je ne suis pas sûr qu'il y ait une raison à cela - sauf qu'il en est ainsi depuis longtemps, et cela reste donc le cas, pour des raisons de compatibilité descendante.



À titre de référence, quelques liens/citations vers différentes pages du manuel:

Pour les fonctions ( citation ):

Remarque: Les noms de fonction ne respectent pas la casse, bien qu'il soit généralement bon d'appeler des fonctions telles qu'elles apparaissent dans leur déclaration.

Et les méthodes ne sont pas beaucoup plus que des fonctions dans les objets - surtout quand on pense à PHP 4 et la compatibilité descendante.


Et, pour les variables ( citation ):

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.

Et les propriétés des objets ne sont pas beaucoup plus que des variables dans les objets - même remarque sur PHP 4 et la compatibilité descendante.

34
Pascal MARTIN