web-dev-qa-db-fra.com

Les fonctions PHP sont-elles sensibles à la casse?

Je cherchais du code et j'ai trouvé des appels à mySQL_fetch_array. PHP respecte-t-il la casse des noms de fonction? Je me souviens avoir lu ceci quelque part mais ne semble pas y trouver de référence.

96
Ben Dauphinee

Je cite de this :

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.

Ainsi, ses fonctions définies par l'utilisateur ne sont pas sensibles à la casse, il y avait un vote pour rendre les fonctions/objets sous PHP5 sensibles à la casse.

96
SIFE

Non.

Les fonctions PHP ne sont pas sensibles à la casse.

32
mpen

TL; DR: les noms de classe ne respectent pas la casse, mais utilisent toujours la même casse que dans la déclaration (comme avec les fonctions). De plus, l'instanciation de classes avec des cas différents tels qu'ils ont été définis peut entraîner des problèmes avec les chargeurs automatiques.


De plus, les noms de classe ne respectent pas la casse:

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

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

Cela produit:

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 d'utiliser des chargeurs automatiques et des systèmes de fichiers sensibles à la casse (comme ext2/3/4), en ce que vous devez appeler le nom de la classe avec le même cas le nom du fichier contenant la classe (pas comment le nom de la classe est réellement mis en boîtier), ou utilisez strtolower:

Le fichier de classe:

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

La fonction de chargeur automatique (__autoload Ou une fonction pour s'enregistrer avec 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 ce travail (c'est-à-dire avoir des noms de classe insensibles à la casse en utilisant un chargeur automatique) si vous avez ajouté un appel à strtolower() dans le code du chargeur automatique, mais comme pour les fonctions, il est préférable de référencer une classe dans le de la même manière qu'il est déclaré, ayez le nom de fichier avec la même casse que le nom de classe, utilisez les chargeurs automatiques et oubliez d'utiliser strtolower et les likes.

19
Carlos Campderrós

Non, ils sont pas sensibles à la casse, cependant, vous devez toujours utiliser la casse qui est dans le manuel, par souci de cohérence.

Cependant, les variables sont sensibles à la casse.

7
alex

Dans PHP les variables sont sensibles à la casse mais les fonctions n'ont pas de problème comme celui-ci. Vous pouvez utiliser les instructions suivantes pour afficher la sortie, toutes afficheront le même résultat.

<?php
Echo "This is a test script";
ECHO "This is a test script";
echo "This is a test script";
?>

D'un autre côté, si vous changez la sensibilité à la casse des variables, cela montrera l'erreur.

Exemple:

<?php
$a=5;
echo $A;// It will show the error.
?>

Sortie:

Notice: Undefined variable: A in C:\xampp\htdocs\test.php on line 3
3
atif

Et les noms de méthode sont également insensibles à la casse. par exemple:-

<?php
       class C { 

           public function method() { } 

           public function METHOD() { } 
       }

sortie:

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

En conclusion de la réponse de chacun. Même si PHP n'exige pas la cohérence de la casse des caractères dans toutes les instances, même jusqu'à présent en PHP5.

La meilleure pratique sera

utilisez toujours les mêmes cas lorsque vous faites référence à des variables (ses "obligatoires") ou à des fonctions (ses "facultatives, mais recommandées).

Vous ne savez peut-être pas qu'un jour le vote passera et vous économiserez tout le cauchemar de changer les cas dans vos applications faites il y a quelques années qui nécessitent une mise à jour en PHP.

J'espère que ça aide de toute façon.

1
weia design