Die meisten Antworten sprechen nicht wirklich den Hauptpunkt an : Was funktioniert besser, wenn Sie sich Code ansehen und es gibt viele Schließbefehle wie } } } }(was endifauch möglich ist) und Sie möchten wissen, wo sie geöffnet waren? Die Antwort ist weder . Es ist im Grunde die erste "Regel" der Python-Design-Prinzipien .
Cregox
7
Offensichtlich {}ist es besser und : endif;eine Gräueltat, die es nicht geben würde, wenn das Leben fair wäre. Mit einem guten Texteditor haben Sie eine Tastenkombination für passende Klammern, um von der Öffnung zum Schließen oder umgekehrt zu springen. Für die abscheuliche : endif;Syntax gibt es so etwas noch nie .
Entwicklerwjk
3
@developerwjk wie könnte das nie existieren?
alex
Antworten:
176
Sie sind die gleichen, aber die zweite ist großartig, wenn Sie MVC in Ihrem Code haben und nicht viele Echos in Ihrem Code haben möchten. Zum Beispiel .phtmlschreibe ich in meine Dateien (Zend Framework) so etwas:
<?php if($this->value):?>
Hello<?php elseif($this->asd):?>
Your name is: <?= $this->name ?><?php else:?>
You don't have a name.<?php endif;?>
@alex Es wird auch mit geschweiften Klammern funktionieren, aber zumindest persönlich finde ich diesen Weg in solchen Dingen klarer. Weil sie wissen, dass es das Ende eines Wenn und nicht das Ende einer Schleife oder etwas anderem ist. Denken Sie, Sie haben endfor und endwhile oder etwas Ähnliches auch.
Svish
10
Ich würde das <? =?> Nicht verwenden, da es nicht auf allen Servern unterstützt wird, insbesondere auf Shared Hosting-Servern, bei denen Sie die php.ini nicht ändern können.
Siqi Lin
2
Der relevante Punkt ist <? Php endif; ?> - Sie können genau sagen, was auch mit vielen HTML-Zeilen zwischen dem vorhergehenden if / else und dieser Anweisung endet.
Fenton
7
Warum "ist der zweite großartig, wenn Sie nicht viele Echos in Ihrem Code haben möchten"? Ich denke, das gilt auch für die traditionelle Syntax {}. Es wird kein zusätzliches Echo benötigt <?php if(...){ ?> ... <?php }else{ ?> ... <?php } ?>. Was ist der Unterschied zu <?php if(...): ?> ... <?php else: ?> ... <?php endif ?>?
Sithu
9
Ich bin mir nicht sicher, warum diese Antwort die höchste ist, da sie kein gutes Beispiel ist (genau das können Sie mit geschweiften Klammern erreichen).
Reinier Kaper
69
Ich persönlich hasse die alternative Syntax wirklich. Eine schöne Sache an den Klammern ist, dass die meisten IDEs, Vim usw. Klammer-Hervorhebungen haben. In meinem Texteditor kann ich auf eine Klammer doppelklicken und sie hebt den gesamten Block hervor, sodass ich sehr leicht sehen kann, wo er endet und beginnt.
Ich kenne keinen einzigen Editor, der Endif, Endforeach usw. hervorheben kann.
Dies soll in PHP-Vorlagen verwendet werden, bei denen Anfang und Ende des Blocks durch einen Teil der Fremdsprache getrennt sind. Wenn Ihre IDE PHP gut genug versteht, um dies zu analysieren, sollte sie auch endifals Blockende richtig hervorgehoben werden. Wenn dies nicht der Fall ist, kaufen Sie nichts, indem Sie es verwenden, }da es sowieso nicht passt .
Pavel Minaev
2
Die meisten Ideen (zumindest die, die ich verwendet habe) markieren nur {}
@Herr. Minaev: Der Klammer-Matcher wird wahrscheinlich in 98% der Fälle korrekt analysiert, selbst wenn sich darin Fremdcode befindet. Es wird nur fehlschlagen, wenn eine ezoterische Klammer "Öffnen, aber kein Schließen von Code" darin enthalten ist. Ja, es passiert, aber es kommt nur selten vor. Warum denkst du, dass ein komplexes "Ende-was auch immer"; Parser-Ansatz wird praktisch besser als die einfache Lösung?
PatlaDJ
Ich denke , der wichtigste Punkt ist beschreibend , wenn nötig. So können wir leicht herausfinden, wo es geöffnet war, unabhängig davon, welches Tool wir verwenden müssen. Dies gilt insbesondere für PHP, das Sie von Zeit zu Zeit mit den einfachsten Editoren sehen müssen.
Cregox
49
Ich denke, das sagt alles:
Diese alternative Syntax eignet sich hervorragend zur Verbesserung der Lesbarkeit (sowohl für PHP als auch für HTML!) in Situationen, in denen Sie eine Mischung aus diesen haben.
Beim Mischen von HTML und PHP ist die Alternative sytnax viel einfacher zu lesen. In normalen PHP-Dokumenten sollte die traditionelle Syntax verwendet werden.
Aber wenn das endifzu weit vom Korrespondenten entfernt ist, ist es ifmeiner Meinung nach viel besser, einen referenzierenden Kommentar dazu abzugeben. Nur damit Sie leicht finden können, wo es geöffnet war. Egal welche Sprache es ist:
if(my_horn_is_red or her_umbrella_is_yellow){// ...// let's pretend this is a lot of code in the middleforeach(day in week){
sing(a_different_song[day]);}// ...}//if my_horn_is_red
Das gilt eigentlich für jede analoge "Schlusssache"! ;)
Außerdem gehen Redakteure im Allgemeinen besser mit geschweiften Klammern um, in dem Sinne, dass sie Sie darauf hinweisen können, wo sie geöffnet waren. Aber selbst das macht die beschreibenden Kommentare nicht weniger gültig.
Stimmen Sie zu, dass dies viel besser ist - anstatt endif auszutippen - können Sie sagen, was die if-Bedingung tatsächlich tut.
Cartalot
@cartalot vielleicht wäre es sogar schön, die Sprache eingebaut zu haben (als optionales schließendes Argument für benannte Blöcke), sodass wir Fehler beim Schließen falscher Blöcke an falschen Stellen haben könnten! :)
Ich denke, dass es wirklich von Ihrem persönlichen Codierungsstil abhängt. Wenn Sie an C ++, Javascript usw. gewöhnt sind, fühlen Sie sich mit der Syntax {} möglicherweise wohler. Wenn Sie an Visual Basic gewöhnt sind, möchten Sie möglicherweise Folgendes verwenden: endif; Syntax.
Ich bin mir nicht sicher, ob man definitiv sagen kann, dass einer leichter zu lesen ist als der andere - es ist eine persönliche Präferenz. Normalerweise mache ich so etwas:
ist Ansichtssache. Ich kann sehen, warum manche meinen, der zweite Weg sei einfacher - aber nur, wenn Sie Ihr ganzes Leben lang nicht in Javascript und C ++ programmiert haben. :) :)
Nein, die Klammern sind objektiv leichter zu lesen (wenn Sie nicht die ägyptische Version verwenden). Selbst wenn Sie die Klammern so ausführen, dass sie wie ein Ägypter laufen, ist sie leichter zu lesen als die VB-Syntax, da moderne Texteditoren über eine Klammeranpassungsfunktion verfügen, mit der Sie vom Öffnen zum Schließen der Klammer oder umgekehrt gelangen. Es gibt keine Möglichkeit, eine VB-Syntaxanpassungsfunktion zu haben. Außerdem müssen Sie die Verschachtelung berücksichtigen, und VB scheitert daran kläglich.
Entwicklerwjk
5
Ich würde die erste Option verwenden, wenn dies überhaupt möglich ist, unabhängig von der neuen Option. Die Syntax ist Standard und jeder weiß es. Es ist auch abwärtskompatibel.
Aber: Wenn Sie PHP als Vorlagensprache in Ihren Ansichtsdateien verwenden möchten (das V von MVC), können Sie diese alternative Syntax verwenden, um zwischen PHP-Code zu unterscheiden, der zur Implementierung von Geschäftslogik (Controller- und Model-Teile von MVC) geschrieben wurde, und Gui- Logik. Natürlich ist es nicht obligatorisch und Sie können jede beliebige Syntax verwenden.
Es gibt keinen technischen Unterschied zwischen den beiden Syntaxen. Die alternative Syntax ist nicht neu. Es wurde mindestens schon in PHP 4 und vielleicht sogar schon früher unterstützt.
Möglicherweise bevorzugen Sie das alternative Formular, da es explizit angibt, welche Kontrollstruktur endet: endwhileBeispielsweise kann nur ein whileBlock beendet werden , während bei einer Klammer alles geschlossen werden kann.
Möglicherweise bevorzugen Sie jedoch die herkömmliche Syntax, wenn Sie einen Editor verwenden, der geschweifte Klammern in anderen C-ähnlichen Syntaxen unterstützt. Vim unterstützt beispielsweise mehrere Tastenanschläge, um zu passenden Klammern und zu den Anfangs- und Endpunkten von durch Klammern getrennten Blöcken zu navigieren. Die alternative Syntax würde diese Editorfunktion beschädigen.
Ein guter Texteditor verfügt über eine Verknüpfung in Klammern, mit der Sie dorthin gelangen, wo er begonnen hat. Es endif;wird schwierig sein, den Anfang dafür zu finden, da sie dafür keine ähnliche Funktion haben und der Code im VB-Stil nicht gut verschachtelt ist.
Entwicklerwjk
3
Es hängt alles davon ab, ich persönlich bevorzuge die traditionelle Syntax mit Echos und vielen Einrückungen, da sie einfach viel einfacher zu lesen ist.
<?php
if($something){
doThis();}else{
echo '<h1>Title</h1>
<p>This is a paragraph</p>
<p>and another paragraph</p>';}?>
Ich bin damit einverstanden, dass die Alt-Syntax mit den verschiedenen Endklauseln sauberer ist, aber es fällt mir wirklich schwer, ohne Hilfe der Texteditor-Hervorhebung mit ihnen umzugehen, und ich bin es einfach nicht gewohnt, "komprimierten" Code wie diesen zu sehen:
Wenn Sie den gesamten Thread lesen würden: Alternative Syntax wird bevorzugt und viel <em> sauberer </ em> beim Vorlagen oder Verwenden von Fremdsprachen in PHP-Ansichten
Juraj Blahunka
1
Ich habe geschweifte Klammern für "if, else" -Bedingungen verwendet. Ich fand jedoch "if (xxx): endif;" ist semantischer, wenn der Code stark umbrochen ist und in Editoren leichter zu lesen ist.
Natürlich können viele Editoren Codeblöcke erkennen und hervorheben, wenn geschweifte Klammern ausgewählt werden. Einige eignen sich auch gut für das Paar "if (xxx): endif" (z. B. NetBeans).
Persönlich würde ich "if (xxx): endif" empfehlen, aber für kleine Zustandsprüfungen (z. B. nur eine Codezeile) gibt es keine großen Unterschiede.
Ich habe das Gefühl, dass keine der bereits vorhandenen Antworten die Antwort hier vollständig identifiziert, daher werde ich meine eigene Perspektive artikulieren. Funktionell sind die beiden Methoden gleich. Wenn der Programmierer mit anderen Sprachen vertraut ist, die der C-Syntax folgen, fühlen sie sich wahrscheinlich mit den Klammern wohler, oder wenn PHP die erste Sprache ist, die sie lernen, fühlen sie sich mit der ifendifSyntax wohler , da sie näher zu sein scheint zur regulären Sprache.
Wenn Sie ein wirklich ernsthafter Programmierer sind und die Dinge schnell erledigen müssen, dann glaube ich, dass die Syntax der geschweiften Klammern überlegen ist, weil sie Zeit beim Tippen spart
if(/*condition*/){/*body*/}
verglichen mit
if(/*condition*/):/*body*/
endif;
Dies gilt insbesondere für andere Schleifen, z. B. foreachwenn Sie am Ende zusätzliche 10 Zeichen eingeben würden. Bei geschweiften Klammern müssen Sie nur zwei Zeichen eingeben, aber für die schlüsselwortbasierte Syntax müssen Sie für jede Schleife und bedingte Anweisung ein ganz zusätzliches Schlüsselwort eingeben.
} } } }
(wasendif
auch möglich ist) und Sie möchten wissen, wo sie geöffnet waren? Die Antwort ist weder . Es ist im Grunde die erste "Regel" der Python-Design-Prinzipien .{}
ist es besser und: endif;
eine Gräueltat, die es nicht geben würde, wenn das Leben fair wäre. Mit einem guten Texteditor haben Sie eine Tastenkombination für passende Klammern, um von der Öffnung zum Schließen oder umgekehrt zu springen. Für die abscheuliche: endif;
Syntax gibt es so etwas noch nie .Antworten:
Sie sind die gleichen, aber die zweite ist großartig, wenn Sie MVC in Ihrem Code haben und nicht viele Echos in Ihrem Code haben möchten. Zum Beispiel
.phtml
schreibe ich in meine Dateien (Zend Framework) so etwas:quelle
{}
. Es wird kein zusätzliches Echo benötigt<?php if(...){ ?> ... <?php }else{ ?> ... <?php } ?>
. Was ist der Unterschied zu<?php if(...): ?> ... <?php else: ?> ... <?php endif ?>
?Ich persönlich hasse die alternative Syntax wirklich. Eine schöne Sache an den Klammern ist, dass die meisten IDEs, Vim usw. Klammer-Hervorhebungen haben. In meinem Texteditor kann ich auf eine Klammer doppelklicken und sie hebt den gesamten Block hervor, sodass ich sehr leicht sehen kann, wo er endet und beginnt.
Ich kenne keinen einzigen Editor, der Endif, Endforeach usw. hervorheben kann.
quelle
endif
als Blockende richtig hervorgehoben werden. Wenn dies nicht der Fall ist, kaufen Sie nichts, indem Sie es verwenden,}
da es sowieso nicht passt .Ich denke, das sagt alles:
http://ca3.php.net/manual/en/control-structures.alternative-syntax.php
Beim Mischen von HTML und PHP ist die Alternative sytnax viel einfacher zu lesen. In normalen PHP-Dokumenten sollte die traditionelle Syntax verwendet werden.
quelle
In unserem Unternehmen ist der bevorzugte Umgang mit HTML:
Am Ende geht es wirklich darum, einen auszuwählen und dabei zu bleiben.
quelle
<?php if(TRUE){?> test <?php }?> <?php else{ ?> test2 <?php }?>
Sie sind in der Tat beide funktionell gleich.
Aber wenn das
endif
zu weit vom Korrespondenten entfernt ist, ist esif
meiner Meinung nach viel besser, einen referenzierenden Kommentar dazu abzugeben. Nur damit Sie leicht finden können, wo es geöffnet war. Egal welche Sprache es ist:Das gilt eigentlich für jede analoge "Schlusssache"! ;)
Außerdem gehen Redakteure im Allgemeinen besser mit geschweiften Klammern um, in dem Sinne, dass sie Sie darauf hinweisen können, wo sie geöffnet waren. Aber selbst das macht die beschreibenden Kommentare nicht weniger gültig.
quelle
Hier finden Sie es in der offiziellen Dokumentation: PHP: Alternative Syntax für Kontrollstrukturen
quelle
Ich denke, dass es besonders klarer ist, wenn Sie eine Mischung aus
if
s,for
s undforeach
es in Ansichtsskripten verwenden:im Gegensatz zu:
Dies ist besonders nützlich für lange Steueranweisungen, bei denen die obere Deklaration möglicherweise nicht in der unteren Klammer angezeigt wird.
quelle
Ich denke, dass es wirklich von Ihrem persönlichen Codierungsstil abhängt. Wenn Sie an C ++, Javascript usw. gewöhnt sind, fühlen Sie sich mit der Syntax {} möglicherweise wohler. Wenn Sie an Visual Basic gewöhnt sind, möchten Sie möglicherweise Folgendes verwenden: endif; Syntax.
Ich bin mir nicht sicher, ob man definitiv sagen kann, dass einer leichter zu lesen ist als der andere - es ist eine persönliche Präferenz. Normalerweise mache ich so etwas:
Ob das leichter zu lesen ist als:
ist Ansichtssache. Ich kann sehen, warum manche meinen, der zweite Weg sei einfacher - aber nur, wenn Sie Ihr ganzes Leben lang nicht in Javascript und C ++ programmiert haben. :) :)
quelle
Ich würde die erste Option verwenden, wenn dies überhaupt möglich ist, unabhängig von der neuen Option. Die Syntax ist Standard und jeder weiß es. Es ist auch abwärtskompatibel.
quelle
Beide sind gleich.
Aber: Wenn Sie PHP als Vorlagensprache in Ihren Ansichtsdateien verwenden möchten (das V von MVC), können Sie diese alternative Syntax verwenden, um zwischen PHP-Code zu unterscheiden, der zur Implementierung von Geschäftslogik (Controller- und Model-Teile von MVC) geschrieben wurde, und Gui- Logik. Natürlich ist es nicht obligatorisch und Sie können jede beliebige Syntax verwenden.
ZF verwendet diesen Ansatz.
quelle
Es gibt keinen technischen Unterschied zwischen den beiden Syntaxen. Die alternative Syntax ist nicht neu. Es wurde mindestens schon in PHP 4 und vielleicht sogar schon früher unterstützt.
Möglicherweise bevorzugen Sie das alternative Formular, da es explizit angibt, welche Kontrollstruktur endet:
endwhile
Beispielsweise kann nur einwhile
Block beendet werden , während bei einer Klammer alles geschlossen werden kann.Möglicherweise bevorzugen Sie jedoch die herkömmliche Syntax, wenn Sie einen Editor verwenden, der geschweifte Klammern in anderen C-ähnlichen Syntaxen unterstützt. Vim unterstützt beispielsweise mehrere Tastenanschläge, um zu passenden Klammern und zu den Anfangs- und Endpunkten von durch Klammern getrennten Blöcken zu navigieren. Die alternative Syntax würde diese Editorfunktion beschädigen.
quelle
Am Ende möchten Sie einfach nicht nach der folgenden Zeile suchen und dann raten müssen, wo sie begonnen hat:
Technisch und funktional sind sie gleich.
quelle
endif;
wird schwierig sein, den Anfang dafür zu finden, da sie dafür keine ähnliche Funktion haben und der Code im VB-Stil nicht gut verschachtelt ist.Es hängt alles davon ab, ich persönlich bevorzuge die traditionelle Syntax mit Echos und vielen Einrückungen, da sie einfach viel einfacher zu lesen ist.
Ich bin damit einverstanden, dass die Alt-Syntax mit den verschiedenen Endklauseln sauberer ist, aber es fällt mir wirklich schwer, ohne Hilfe der Texteditor-Hervorhebung mit ihnen umzugehen, und ich bin es einfach nicht gewohnt, "komprimierten" Code wie diesen zu sehen:
quelle
Früher habe ich geschweifte Klammern verwendet, heute bevorzuge ich diese alternative Syntax für kurze Hand, da der Code lesbar und zugänglich ist.
quelle
Persönlich bevorzuge ich es, es in zwei getrennten Abschnitten zu machen, aber innerhalb des gleichen PHP wie:
Aber vielleicht ist es langsamer?
quelle
Ich denke, es ist eine Frage der Präferenz. Ich persönlich benutze:
quelle
Ich habe geschweifte Klammern für "if, else" -Bedingungen verwendet. Ich fand jedoch "if (xxx): endif;" ist semantischer, wenn der Code stark umbrochen ist und in Editoren leichter zu lesen ist.
Natürlich können viele Editoren Codeblöcke erkennen und hervorheben, wenn geschweifte Klammern ausgewählt werden. Einige eignen sich auch gut für das Paar "if (xxx): endif" (z. B. NetBeans).
Persönlich würde ich "if (xxx): endif" empfehlen, aber für kleine Zustandsprüfungen (z. B. nur eine Codezeile) gibt es keine großen Unterschiede.
quelle
Ich habe das Gefühl, dass keine der bereits vorhandenen Antworten die Antwort hier vollständig identifiziert, daher werde ich meine eigene Perspektive artikulieren. Funktionell sind die beiden Methoden gleich. Wenn der Programmierer mit anderen Sprachen vertraut ist, die der C-Syntax folgen, fühlen sie sich wahrscheinlich mit den Klammern wohler, oder wenn PHP die erste Sprache ist, die sie lernen, fühlen sie sich mit der
if
endif
Syntax wohler , da sie näher zu sein scheint zur regulären Sprache.Wenn Sie ein wirklich ernsthafter Programmierer sind und die Dinge schnell erledigen müssen, dann glaube ich, dass die Syntax der geschweiften Klammern überlegen ist, weil sie Zeit beim Tippen spart
verglichen mit
Dies gilt insbesondere für andere Schleifen, z. B.
foreach
wenn Sie am Ende zusätzliche 10 Zeichen eingeben würden. Bei geschweiften Klammern müssen Sie nur zwei Zeichen eingeben, aber für die schlüsselwortbasierte Syntax müssen Sie für jede Schleife und bedingte Anweisung ein ganz zusätzliches Schlüsselwort eingeben.quelle