Boolesche Werte in Großbuchstaben vs. Kleinbuchstaben in PHP

134

Als ich PHP lernte, las ich irgendwo, dass Sie immer die Großbuchstaben von Booleschen verwenden sollten, TRUEund FALSEweil die "normalen" Kleinbuchstaben trueund false"nicht sicher" zu verwenden waren.

Es ist jetzt viele Jahre her und jedes PHP-Skript, das ich geschrieben habe, verwendet die Großbuchstabenversion. Jetzt stelle ich dies jedoch in Frage, da ich viel PHP gesehen habe, das mit der Kleinbuchstabenversion (dh Zend Framework) geschrieben wurde.

Gibt es / gab es jemals einen Grund, die Großbuchstabenversion zu verwenden, oder ist es vollkommen in Ordnung, Kleinbuchstaben zu verwenden?

edit: Ich habe vergessen zu erwähnen, dass dies auch für NULLund gilt null.

Austin Hyde
quelle
4
Es gibt eine Reihe von Websites, die sagen, dass das Schreiben in Kleinbuchstaben angeblich "viel schneller" ist, ohne jedoch ernsthafte Quellen zu nennen. Interessiert zu sehen, ob etwas auftaucht.
Pekka
2
Das ist nicht wahr. Ich habe es mit 5M-Iterationen getestet und beide haben die gleichen Ergebnisse erzielt, 0,5 Sekunden auf meinem PC: P
Alex
9
@Alex Pekka kann auch bedeuten, dass das eigentliche Schreiben von Booleschen Werten in Kleinbuchstaben schneller ist. Das macht Sinn, weniger Schlüssel verwenden zu müssen. Der Unterschied ist jedoch winzig.
Martti Laine
Entschuldigung, ich habe versehentlich abgelehnt, nachdem ich für Sie gestimmt habe.
SIFE
1
Eine interessante Beobachtung: var_export () schreibt wahr und falsch als Kleinbuchstaben, aber NULL als Großbuchstaben. Schön, was? 3v4l.org/6Oelk
donquixote

Antworten:

89

Das offizielle PHP-Handbuch sagt:

Verwenden Sie die Schlüsselwörter TRUE oder FALSE, um ein boolesches Literal anzugeben. Bei beiden wird die Groß- und Kleinschreibung nicht berücksichtigt.

Also ja true === TRUEund false === FALSE.

Persönlich aber ziehe ich TRUEüber trueund FALSEüber falsefür die bessere Lesbarkeit. Es ist der gleiche Grund für meine Präferenz für die Verwendung von ORover oroder ||und für die Verwendung von ANDover andoder &&.

Das PSR-2 - Standard erfordert true, falseund nullin Kleinbuchstaben zu sein.

Lukman
quelle
81
Ich will nur darauf hinweisen ORund ||verschiedene Operatoren in PHP sind (wie in sie unterschiedlichen Vorrang hat), so ist ANDund &&. (Also zum Beispiel &&und ||haben eine höhere Priorität als die Zuweisungsoperatoren, aber ORund ANDsind es nicht.)
Johrn
21
Auch bei den heutigen IDEs sehe ich keinen Grund, einen reinen Booleschen Wert in Großbuchstaben als Syntax-Textmarker für die meisten IDEs zu verwenden, die sie mit großer Unterscheidung trennen.
RobertPitt
37
Ich tippe sie lieber in Kleinbuchstaben, damit ich die Umschalttaste nicht gedrückt halten muss.
Bestätigen Sie den
6
Ich mag auch Kleinbuchstaben - wie in Java, aber für jeden gibt es seine eigenen. Ich wünschte jedoch, sie würden sich auf EINEM Weg niederlassen und uns alle dazu bringen, auf den einen oder anderen zu wechseln !!!!! Dies ist keine Flexibilität, die ich wirklich haben muss!
Ray
5
@Cyril: Es gibt viele gute Gründe, sich dem Hass auf PHP hinzugeben (z. B. sehen Sie, was Johrn oben erwähnt hat, das wusste ich nicht), aber da es im Grunde genommen die Groß- und Kleinschreibung nicht berücksichtigt, gibt es im gemischten Fall nichts Seltsames Ausdrücke sind gleich. Was jedoch Unsinn ist, ist, dass es Groß- und Kleinschreibung und Groß- und Kleinschreibung mit allgemeiner Unempfindlichkeit vermischt. (Siehe z. B.: Stackoverflow.com/questions/5643496/… )
.
110
define('TRUE', false);
define('FALSE', true);

Viel Spaß beim Debuggen! (PHP < 5.1.3 (2. Mai 2006) , siehe Demo )

Bearbeiten: Großbuchstaben sind Konstanten und Kleinbuchstaben sind Werte. Sie interessieren sich für den Wert, nicht für die Konstante, die sich leicht ändern kann.


Eliminated run-time constant fetching for TRUE, FALSE and NULL

author      dmitry <dmitry>
            Wed, 15 Mar 2006 09:04:48 +0000 (09:04 +0000)
committer   dmitry <dmitry>
            Wed, 15 Mar 2006 09:04:48 +0000 (09:04 +0000)
commit      d51599dfcd3282049c7a91809bb83f665af23b69
tree        05b23b2f97cf59422ff71cc6a093e174dbdecbd3
parent      a623645b6fd66c14f401bb2c9e4a302d767800fd

Commits d51599dfcd3282049c7a91809bb83f665af23b69 (und 6f76b17079a709415195a7c27607cd52d039d7c3 )

Radu
quelle
7
-1 weil A) das sinnlos ist. B) Dies beantwortet die Frage nicht. und C) Ich habe die richtige Antwort bereits akzeptiert und dies enthält keine zusätzlichen hilfreichen Informationen.
Austin Hyde
36
Lassen Sie mich dann im Detail erklären: Großbuchstaben sind Konstanten und Kleinbuchstaben sind Werte. Sie interessieren sich für den Wert, nicht für die Konstante, die sich leicht ändern kann. Wenn Sie also ein wenig über den Text nachgedacht hätten und sich nicht beeilen würden, eine Strafe zu verhängen, hätten Sie dies wahrscheinlich verstanden.
Radu
13
Ich verstehe den Punkt, den Sie (jetzt) ​​machen, aber die Art, wie Sie ihn ursprünglich gemacht haben, war (IMO) kryptisch und sinnlos. Hätten Sie Ihre Antwort ursprünglich nur bearbeitet, hätte ich sie positiv bewertet, da dies eigentlich ein sehr guter Punkt ist.
Austin Hyde
4
Das ist die richtige Antwort. Hätte die Punkte dafür bekommen sollen.
Serienwurm
22
Wie für das zu bearbeiten, ist diese Beschreibung etwas irreführend ... Die tatsächlichen Werte selbst (die unten in Token kompiliert bekommen T_NULL, T_TRUEund T_FALSEzur Analysezeit), Groß- und Kleinschreibung zu verwenden, da NULList nicht wirklich eine „Konstante“ --- es sei denn, Sie machen es zu einer Konstanten define(). Einfach zu verwenden NULLoder TRUEbedeutet nicht, dass es eine Konstante ist, als ob es keine solche Konstante gibt, interpretiert PHP sie als das Literal. Eine genauere Beschreibung ist, dass die Kleinbuchstabenversionen nicht neu definiert werden können, wohingegen jede andere Fallvariante dies kann .
Joe
31

Verwenden Sie Kleinbuchstaben.

  1. Es ist einfacher zu tippen. (IMO)
  2. Es ist leichter zu lesen. (IMO)
  3. JavaScript-Boolesche Werte sind Kleinbuchstaben und unterscheiden zwischen Groß- und Kleinschreibung.
Bo Allen
quelle
6
+1; Ich wollte gerade das Javascript-Argument hinzufügen: Da es in der Webprogrammierung SEHR üblich ist, sowohl PHP- als auch JS-Code zu schreiben, wenden gut entwickelte Fingermuskeln für die Webentwicklung weiterhin routinemäßig den gleichen Buchstaben an, der im Kontext der letzten Sprache verwendet wurde. Zumindest habe ich nach dem Wechsel von PHP oft TRUE oder FALSE in Javascript geschrieben. Die Verwendung von Kleinbuchstaben in PHP hat dieses Problem endgültig behoben.
Gr.
11

Wenn Sie JSON verwenden möchten, lautet RFC7159 :

Die wörtlichen Namen MÜSSEN klein geschrieben sein. Andere wörtliche Namen sind nicht zulässig.

Aus der Liste der rückwärts inkompatiblen Änderungen in PHP 5.6 :

json_decode () lehnt jetzt Nicht-Kleinbuchstaben-Varianten der JSON-Literale true, false und null gemäß der JSON-Spezifikation jederzeit ab

Gemäß PSR-2-Standard :

PHP-Schlüsselwörter MÜSSEN in Kleinbuchstaben geschrieben werden.

Die PHP-Konstanten true, false und null MÜSSEN in Kleinbuchstaben angegeben werden.

Mandrake
quelle
Richtig, aber diese Frage bezog sich speziell auf Groß- / Kleinbuchstaben in PHP , nicht auf JSON. Zum Beispiel beides json_encode(TRUE)und json_encode(true)Ausbeute 'true'.
Austin Hyde
3
Entschuldigen Sie die Erwähnung von JSON. Wäre es besser, wenn ich alle diese Referenzen entfernen und nur PSR-2 erwähnen würde?
Mandrake
4
Ich denke, der Verweis auf JSON ist angemessen, da Sie häufig Javascript / JSON mit PHP verwenden und möglicherweise nach Konsistenz suchen.
Doug Kress
9

Ich habe TRUE / FALSE-Boolesche Werte im C-Stil wie alle Konstanten in Großbuchstaben verwendet, bis ich in den PSR- Zug eingestiegen bin .

Abschnitt 2.5 von PSR-2:

Die PHP-Konstanten true, false und null MÜSSEN in Kleinbuchstaben angegeben werden.

Wenn Sie also mit Open-Source-Details gut spielen möchten, müssen Boolesche Werte in Kleinbuchstaben geschrieben werden.

Todd
quelle
5

Es spielt keine Rolle, trueist genau das gleiche wie TRUE. Gleiches gilt für falseund null. Ich habe nicht gehört, dass es irgendwann wichtig gewesen wäre.

Die einzige Möglichkeit, Dinge durcheinander zu bringen, besteht darin, diese Werte anzugeben, zum Beispiel:

$foo = false;   // FALSE
$bar = "false"; // TRUE

$foo2 = true;   // TRUE
$bar2 = "true"; // TRUE

$foo3 = null;   // NULL
$bar3 = "null"; // TRUE

Das einzige, was Sie einschränkt oder ermutigt, Groß- oder Kleinbuchstaben zu verwenden, sind möglicherweise die Kodierungsrichtlinien Ihres Unternehmens oder Ihrer eigenen. Abgesehen davon können Sie beide verwenden, und es treten keine Probleme auf.

Tatu Ulmanen
quelle
FALSE und NULL sind nicht dasselbe. is_null () gibt nicht true zurück, wenn der Wert === FALSE ist.
Noah Goodrich
9
@Noah Goodrich, ich habe das zu keinem Zeitpunkt impliziert falseund nullwäre das gleiche. Ich sagte, dass "dasselbe gilt für falseund null", was bedeutet, dass beide in Klein- oder Großbuchstaben ausgedrückt werden können.
Tatu Ulmanen
5

Ich habe einfachen Code geschrieben, um die Unterschiede zwischen false und FALSE zu überprüfen : Jede Iteration hat etwas bewirkt , das:

    for ($i = 0; $i < self::ITERATIONS; ++$i) {
       (0 == FALSE) ;
    }

Hier sind die Ergebnisse:

Iterations: 100000000
using 'FALSE': 25.427761077881 sec
using 'false': 25.01614689827 sec

Wir können also sehen, dass die Leistung durch den Booleschen Fall nur geringfügig beeinflusst wird - Kleinbuchstaben sind schneller. Aber du wirst es bestimmt nicht sehen.

Arkadij Kuzhel
quelle
Welche JS-Engine? Heutzutage wird JS vor der Ausführung im Speicher kompiliert.
Tiberiu-Ionuț Stan
1
PHP wird vor der Ausführung mit einem Token versehen, und es sollte keinen Zeitunterschied geben. Eine andere Antwort zeigte an, dass das Obermaterial schneller war. Unterschiede dieser Größenordnung sollten bei jedem Test ignoriert werden - dieser Unterschied beträgt 2,5e-7 pro Iteration.
Doug Kress
4

Persönlich habe ich immer Kleinbuchstaben verwendet, aber ohne besonderen Grund, außer um meinen Code ordentlich aussehen zu lassen, verwende ich nur Großbuchstaben, wenn Klassennamen und Variablennamen von Kamelhüllen verwendet werden.

Ein Vorteil bei der Verwendung von Großbuchstaben, der mir in den Sinn kommt, ist, dass sie hervorstechen und im Code leicht zu finden sind.

RMcLeod
quelle
2
+1 für Ordnung. Alle Kappen Tradition kommt von C, aber es ist an der Zeit, diese hässliche Form loszuwerden.
Petruza
2

Ich bin auf diese alte Frage gestoßen, als ich mir das Gleiche gefragt habe. Guter Punkt mit define ('TRUE', false); define ('FALSE', true); Gilt jedoch nicht für PHP5. Das Schreiben dieser Zeilen in einen PHP5-Code ist wie das Schreiben eines Kommentars.

Conrad
quelle
6
Nur zum späteren Nachschlagen haben Sie dies als "Antwort" gepostet. In StackOverflow sollten im Gegensatz zu herkömmlichen Foren Konversationsbeiträge, die nicht als Lösung für die Frage dienen und keine hilfreichen Informationen enthalten, als Kommentar zur ursprünglichen Frage oder zur entsprechenden Antwort veröffentlicht werden. In diesem Fall wäre Ihr Beitrag eher für einen Kommentar zu meiner Frage als für eine Antwort geeignet.
Austin Hyde
8
Eigentlich ist es hilfreich zu wissen, dass dies in PHP 5 nicht mehr funktioniert: P
Alex
1

Hier ist mein TEST unter Windows 7x64bit Apache / 2.4.9 PHP / 5.5.14

$blockLimit = 50;
while($blockLimit > 0): $blockLimit--;

//STAR Here ================================================

$msc = microtime(true);
for ($i = 0; $i < 100000; $i++) {
   echo (FALSE);
}
echo 'FALSE took ' . number_format(microtime(true)-$msc,4) . " Seconds\r\n";
$msc = microtime(true);
for ($i = 0; $i < 100000; $i++) {
   echo (false);
}
echo 'false took ' . number_format(microtime(true)-$msc,4) . " Seconds\r\n";

echo "\r\n --- \r\n";
//Shutdown ==================================================
endwhile;

Diesmal hat FALSE 20 Mal gewonnen. Großbuchstaben sind in meiner Umgebung also schneller.

Abbas Uddin
quelle