Pourquoi les fonctions et méthodes en PHP sont-elles insensibles à la casse?


107

Les fonctions et méthodes en PHP sont insensibles à 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?


161
PHP n'a pas besoin de logique puante!
Max Shawabkeh

2
«Parce que l'homme de la soupe le dit. Pas de justification, mais des références: php.net/manual/en/functions.user-defined.php (entre les exemples 3 et 4), php.net/manual/en/language.variables.basics.php
outis

2
class Share{ share($str){ echo $str; } } $sh = new Share(); $sh->share("string");Vous serez peut-être surpris de voir deux appels à la fonction share ($ str). premier à cause de c'tor et deuxième appel explicite pour les mêmes raisons !!
vivek.m

1
@outis, que voulez-vous dire par "soup man"?
Pacerier du

1
@outis, vous parlez de la "soupe nazie" de Seinfeld. YouTube , Wikipedia
Kevin Traas

Réponses:


98

Permettez-moi de citer une 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 effectuait une journalisation sophistiquée des hits dans une base de données mSQL, un autre agissait comme un interpréteur de données de formulaire. Je me suis retrouvé avec environ 30 petits programmes CGI différents écrits en C avant d'en avoir marre, et je les ai tous combinés dans une seule bibliothèque C. J'ai ensuite écrit un analyseur très simple qui choisirait des balises dans les fichiers HTML et les remplacerait 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 n'ai pensé que j'écrivais un langage de script. J'ajoutais simplement un peu de fonctionnalités à l'analyseur de remplacement de macro. J'écrivais encore 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 fonction en PHP pour ne pas le faire. Plus tard, cette fonctionnalité est restée active dans la langue.


66
Je me souviens également d'une citation de Rasmus lors d'une conférence PHP à Paris disant plus ou moins: "Je ne suis certainement pas un bon programmeur, en termes de respect de règles ou de normes de codage strictes, mais je peux dire que si vous comptez sur la sensibilité à la casse pour reconnaissez un nom de fonction à un autre, vous avez de sérieux problèmes! "
Tom Desp

1
est-il toujours insensible à la casse à l'avenir?
vee le

4
C'est pourquoi les programmeurs php utilisent le soulignement au lieu de camelcase pour nommer leurs fonctions.
paperstreet7

2
@ paperstreet7 Certains le font. Les bons ne le font pas. Du moins, plus maintenant.
Dan

13
@dan, beaucoup de "bons" programmeurs utilisent des traits de soulignement. En fait, PSR-0 ne fait délibérément pas de recommandation. Un bon programmeur choisit des traits de soulignement ou camelcase et s'en tient à cette convention. Faire ce choix pour déterminer si quelqu'un est un bon programmeur est assez idiot.
jdp

34

Oui, les noms des fonctions et 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 que c'est comme ça depuis longtemps et, donc, reste le cas, pour des raisons de rétrocompatibilité.



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

Pour les fonctions ( citant ) :

Remarque: les noms de fonction ne sont pas sensibles à 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 des objets - surtout quand on pense à PHP 4 et à la rétrocompatibilité.


Et, pour les variables ( citant ):

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 à propos de PHP 4 et de la rétrocompatibilité.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.