97 votes

Les fonctions PHP sont-elles sensibles à la casse ?

J'ai creusé dans du code, et j'ai trouvé des appels à mySQL_fetch_array . PHP est-il sensible à la casse des noms de fonctions ? Je me souviens avoir lu cela quelque part, mais je n'arrive pas à trouver de référence à ce sujet.

96voto

SIFE Points 2238

Je cite este :

Remarque : les noms de fonction sont insensibles à la casse, mais il est généralement d'appeler les fonctions comme elles apparaissent comme elles apparaissent dans leur déclaration.

Il semble donc que les fonctions définies par l'utilisateur ne respectent pas la casse, il y avait un vote pour rendre les fonctions/objets sous PHP5 sensibles à la casse.

32voto

Mark Points 49079

Non.

Les fonctions PHP sont no sensible à la casse.

19voto

Carlos Campderrós Points 6055

TL;DR : les noms de classes sont insensibles à la casse, mais utilisent toujours la même casse que dans la déclaration (comme pour les fonctions). De plus, l'instanciation de classes avec une casse différente de celle de leur définition peut causer des problèmes avec les autochargeurs.


De plus, les noms de classe sont insensibles à la casse :

<?php
class SomeThing {
  public $x = 'foo';
}

$a = new SomeThing();
$b = new something();
$c = new sOmEtHING();
var_dump($a, $b, $c);

Ces sorties :

class SomeThing#1 (1) {
  public $x =>
  string(3) "foo"
}
class SomeThing#2 (1) {
  public $x =>
  string(3) "foo"
}
class SomeThing#3 (1) {
  public $x =>
  string(3) "foo"
}

Le problème est l'utilisation d'autochargeurs et de systèmes de fichiers sensibles à la casse (comme ext2/3/4), dans la mesure où vous devez appeler le nom de la classe avec la même casse que le fichier contenant la classe (et non pas avec la casse réelle du nom de la classe), ou utiliser strtolower :

Le fichier de classe :

<?php
// filename something.php
class SomeThing {
   ...
}

La fonction d'autoloader ( __autoload ou une fonction à enregistrer auprès de spl_autoload_register )

function my_autloader($className) {
  $filename = CLASSES_DIR . DIRECTORY_SEPARATOR . $className . '.php';
  if (file_exists($filename)) {
    require($filename);
  }
}

Maintenant avec ce code :

$a = new something(); // works
$b = new SomeThing(); // does not work
$c = new SOMETHING(); // does not work

Vous pouvez faire fonctionner cela (c'est-à-dire avoir des noms de classe insensibles à la casse en utilisant un autoloader) si vous ajoutez un appel à strtolower() dans le code de l'autoloader, mais comme pour les fonctions, il vaut mieux référencer une classe de la même manière qu'elle est déclarée, avoir le nom du fichier avec la même casse que le nom de la classe, utiliser les autoloaders, et oublier l'utilisation de strtolower et autres.

7voto

alex Points 186293

Non, ils sont no Toutefois, pour des raisons de cohérence, vous devez toujours utiliser la casse qui figure dans le manuel.

Cependant, les variables sont sensible à la casse.

2voto

HabeebPerwad Points 2081

Et les noms des méthodes sont également insensibles à la casse. ex : -

<?php
       class C { 

           public function method() { } 

           public function METHOD() { } 
       }

sortie :

PHP Fatal error:  Cannot redeclare C::METHOD() in ....php on line 6

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X