Les fonctions PHP sont-elles sensibles à la casse?

j'ai fouillé dans un code, et j'ai trouvé des appels à mySQL_fetch_array . PHP est-il sensible aux noms de fonction? Je me souviens avoir lu ça quelque part, mais je ne trouve aucune référence.

95
demandé sur Ben Dauphinee 2011-04-13 05:31:59

8 réponses

je cite de ce :

Note: les noms de fonction sont insensible à la casse, bien qu'il soit généralement bonne forme pour appeler des fonctions qu'ils apparaissent dans leur déclaration.

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

93
répondu SIFE 2014-12-29 23:03:12

Pas de.

les fonctions PHP sont pas sensible à la casse.

32
répondu mpen 2015-05-05 17:12:00

TL; DR: les noms de classe sont insensibles à la casse, mais utilisent toujours la même casse que dans la déclaration (même chose qu'avec les fonctions). Aussi, l'instanciation de classes avec différents cas qu'ils ont été définis peuvent provoquer des problèmes avec les chargeurs automatiques.


de plus, les noms de classe ne sont pas sensibles à la casse:

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

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

Ce 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"
}

problème utilise des autoloaders et des systèmes de fichiers sensibles à la casse (comme ext2/3 / 4), en ce que vous devez appeler le nom de classe avec le même cas, le fichier contenant la classe est nommé (pas comment le nom de classe est réellement casé), ou utiliser strtolower :

le fichier de La classe:

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

la fonction autoloader ( __autoload ou une fonction pour 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 faites ce travail (ie. avoir effectivement cas insensible noms de classe en utilisant un autoloader) si vous avez ajouté un appel à strtolower() dans le code d'autoloader, mais comme avec les fonctions, est juste mieux de faire référence à une classe de la même manière qu'il est déclaré, avoir le nom de fichier avec le même cas que le nom de classe, utiliser autoloaders, et oublier en utilisant strtolower et les goûts.

18
répondu Carlos Campderrós 2013-06-14 11:52:41

non, ils sont pas cas sensible, cependant, vous devriez toujours utiliser le cas qui est dans le manuel, pour la cohérence.

cependant, les variables sont sensibles à la casse.

7
répondu alex 2011-04-13 01:37:40

dans les variables PHP sont sensibles à la casse, mais les fonctions n'ont aucun problème de ce genre.Vous pouvez utiliser les énoncés suivants pour afficher la sortie, tous 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 modifiez la sensibilité des variables, alors l'erreur apparaîtra.

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
répondu atif 2015-08-26 13:07:00

et les noms de méthode sont aussi 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
répondu Habeeb Perwad 2012-12-10 14:33:11

en conclusion de la réponse de tout le monde. Même si PHP ne nécessite pas de cohérence de cas de caractères dans toutes les instances, même jusqu'à présent dans PHP5.

Meilleure pratique

toujours utiliser les mêmes cas lorsqu'il est fait référence à l'une ou l'autre des variables (its' obligatoire) ou les fonctions (son ' optionnel, mais recommandé).

on ne sait jamais peut être qu'un jour le votez Get through et vous sauverez tout le cauchemar de changer des cas dans vos applications faites il y a quelques années qui nécessitent une mise à jour en PHP.

J'espère que ça vous aidera.

1
répondu weia design 2013-09-04 17:08:09

C'est peut-être trop tard, mais...

tout le monde a déjà su ici: PHP engine ne se soucie pas du cas des lettres.

et il y a le vote sur PHP bugtracker, où la majorité dit:"Oui, je suis sensetivity Pro case".

mais je suis contra, parce que dans mon cadre MVC, j'appelle l'action du contrôleur:

    $currentController = new $controller($parameters);
    $currentAction = $currentController->{$action}();

$ controller et $action sont prises à partir de L'URL telle quelle.

Pense que, si un utilisateur publie un lien vers mon site: https://my-site/MyPartnerController/MyPartnerGallery

alors que la classe s'appelle myPartnerController...

cela signifie que personne ne gagne jamais cette page si les noms de classes et de fonctions de PHP sont sensibles à la casse.

Oui, j'utilise toujours tous les noms en code tel que déclaré. Mais je prie pour qu'ils ne rendent jamais les noms des fonctions et des classes sensibles à la casse.

Je vous remercie!

-2
répondu Vsevolod Azovsky 2015-07-12 21:58:36