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.
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.
Antworten:
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.
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 ( __autoload
oder 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 strtolower
und dergleichen.
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
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
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.
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!