Bei PHP-Funktionen wird zwischen Groß- und Kleinschreibung unterschieden?


100

Ich habe einen Code durchgearbeitet und einige Anrufe bei gefunden mySQL_fetch_array. Unterscheidet PHP zwischen Funktionsnamen? Ich erinnere mich, dass ich das irgendwo gelesen habe, aber keinen Hinweis darauf zu finden scheint.


1
Nein, das scheinen sie nicht zu sein. Präferenz ist in der Regel Kleinbuchstaben
Jason

3
Duplikat von stackoverflow.com/questions/2749781/… . Nein, Funktionen unterscheiden nicht zwischen Groß- und Kleinschreibung
Bob Baddeley

Als Referenz: Es ist hier in der Mitte von php.net/manual/en/functions.user-defined.php in einem Hinweis: Block vergraben .
Mario

3
Ich stimme dafür, dies offen zu lassen - der Titel ist viel allgemeiner und expliziter, daher wird er wahrscheinlich mehr Menschen helfen.
Coreyward

Antworten:


100

Ich zitiere daraus :

Hinweis: Bei Funktionsnamen wird die Groß- und Kleinschreibung nicht berücksichtigt, obwohl es normalerweise eine gute Form ist, Funktionen aufzurufen, wie sie in ihrer Deklaration erscheinen.

Also, sein Aussehen wie benutzerdefinierte Funktionen sind nicht case-sensitive, es eine war Abstimmung Funktionen für die Herstellung / Objekte unter PHP5 Fall empfindlich.


3
PHP5 ist bereits verfügbar, Ihre einzige Hoffnung ist PHP6 und ich glaube nicht, dass sie diesen Schritt tun würden. Es würde zu viel für wenig Gewinn brechen.
Mark Tomlin

3
@ Mark Tomlin Ich bin anderer Meinung. Die beste Vorgehensweise besteht darin, den gleichen Fall wie im Handbuch beizubehalten, sodass es wenig kaputt gehen und gleichzeitig die Klarheit erhöhen sollte.
Ben Dauphinee

12
Beeindruckend. Das ist traurig. obwohl ImAgEcReAtEfRoMpNg () eine gute Möglichkeit ist, Code zu verschleiern ...
Pontomedon

8
Da das Zitat "Groß- und Kleinschreibung nicht berücksichtigen" lautet, warum sagen Sie dann "Es sieht so aus, als ob benutzerdefiniert zwischen Groß- und Kleinschreibung unterscheidet"? Wenn das ein Tippfehler ist, sollten Sie ihn wirklich beheben.
Barmar

11
Beeindruckend! Das ist wirklich schön, nach 7 Jahren Codierung herauszufinden!
Daan

34

Nein.

PHP-Funktionen unterscheiden nicht zwischen Groß- und Kleinschreibung.


19

TL; DR: Klassennamen unterscheiden nicht zwischen Groß- und Kleinschreibung, verwenden jedoch immer die gleiche Groß- und Kleinschreibung wie in der Deklaration (wie bei Funktionen). Das Instanziieren von Klassen mit unterschiedlichen Groß- und Kleinschreibung kann Probleme mit Autoloadern verursachen.


Bei Klassennamen wird die Groß- und Kleinschreibung nicht berücksichtigt:

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

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

Dies gibt aus:

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

Das Problem ist die Verwendung von Autoloadern und Dateisystemen mit Groß- und Kleinschreibung (wie ext2 / 3/4), da Sie den Klassennamen mit demselben Fall aufrufen müssen, in dem die Datei mit der Klasse benannt ist (nicht wie der Klassenname tatsächlich umhüllt ist). oder verwenden strtolower:

Die Klassendatei:

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

Die Autoloader-Funktion ( __autoloadoder eine Funktion zum Registrieren bei spl_autoload_register)

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

Jetzt mit diesem Code:

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

Sie können diese strtolower()Funktion ausführen (dh mit einem Autoloader effektiv zwischen Groß- und Kleinschreibung unterscheidende Klassennamen verwenden), wenn Sie im Autoloader-Code einen Aufruf hinzugefügt haben. Wie bei Funktionen ist es jedoch besser, eine Klasse auf die gleiche Weise zu referenzieren, wie sie deklariert ist. Haben Sie den Dateinamen mit der gleichen Groß- / Kleinschreibung wie den Klassennamen, verwenden Sie Autoloader und vergessen Sie die Verwendung strtolowerund dergleichen.


7

Nein, sie unterscheiden nicht zwischen Groß- und Kleinschreibung. Aus Gründen der Konsistenz sollten Sie jedoch immer den im Handbuch angegebenen Fall verwenden.

Bei Variablen wird jedoch zwischen Groß- und Kleinschreibung unterschieden.


3

In PHP wird zwischen Groß- und Kleinschreibung unterschieden, aber Funktionen haben kein Problem wie dieses. Sie können die folgenden Anweisungen zum Anzeigen der Ausgabe verwenden, alle zeigen das gleiche Ergebnis.

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

Wenn Sie andererseits die Groß- und Kleinschreibung von Variablen ändern, wird der Fehler angezeigt.

Beispiel:

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

Ausgabe:

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

2

Bei Methodennamen wird auch die Groß- und Kleinschreibung nicht berücksichtigt. z.B:-

<?php
       class C { 

           public function method() { } 

           public function METHOD() { } 
       }

Ausgabe:

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

1

Zum Abschluss aller Antworten. Auch wenn PHP bis jetzt in PHP5 nicht in allen Fällen eine Konsistenz der Groß- und Kleinschreibung erfordert.

Best Practice wird sein

Verwenden Sie immer dieselben Fälle, wenn Sie entweder auf Variablen (obligatorisch) oder auf Funktionen (optional, aber empfohlen) zurückgreifen.

Sie wissen vielleicht nie, dass eines Tages die Abstimmung abgeschlossen ist, und Sie werden den ganzen Albtraum retten, Fälle in Ihren Anwendungen zu ändern, die vor ein paar Jahren erstellt wurden und in PHP aktualisiert werden müssen.

Hoffe es hilft trotzdem.


Betreff "Rette den ganzen Albtraum, Fälle zu ändern": Nein, ich verstehe, dass bei einer Änderung die Groß- und Kleinschreibung eine Option wäre, die in der php.ini festgelegt ist. So bleibt die Abwärtskompatibilität erhalten.
ToolmakerSteve

-2

Vielleicht ist das zu spät, aber ...

Jeder hat hier bereits gewusst: Die PHP-Engine kümmert sich nicht um den Fall von Buchstaben.

Und es gibt die Abstimmung über PHP Bugtracker, wo die Mehrheit sagt: "Ja, ich bin pro Fall Sensibilität".

Aber ich bin kontra, weil ich in meinem MVC-Framework Controller-Aktion aufrufe:

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

$ controller und $ action werden unverändert von der URL übernommen.

Denken Sie daran, wenn ein Benutzer einen Link zu meiner Site veröffentlicht: https: // my-site / MyPartnerController / MyPartnerGallery

während die Klasse myPartnerController heißt ...

Dies bedeutet, dass niemand diese Seite jemals erhält, wenn bei den Klassen- und Funktionsnamen von PHP zwischen Groß- und Kleinschreibung unterschieden wird.

Ja, ich verwende immer alle Namen im Code wie angegeben. Aber ich bete, dass sie niemals die Namen von Funktionen und Klassen zwischen Groß- und Kleinschreibung unterscheiden.

Danke dir!


1
Das ist wirklich schlimm ... wenn ich zu my-site / myLogInPage / loginsuccess gehen und ein paar Vermutungen anstellen würde , wie Sie Ihre Anmeldeerfolgsfunktion genannt haben , in der ich mich befinde , oder in der Lage wäre, ein paar Dinge zu löschen ...
Tschallacka
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.