Sind "elseif" und "else if" auch synonym?

170

Sind elseifund else ifganz gleich, oder gibt es einen Unterschied?

Hat Zend einen akzeptierten "Standard", auf dem er verwendet werden soll?

Ich persönlich mag es nicht, elseifim Code zu sehen, aber ich muss nur wissen, ob sie synonym sind und das PHP-Handbuch nicht so einfach zu suchen ist.

Theodore R. Smith
quelle
10
Übrigens nicht jede andere Sprache else if. Zum Beispiel verwendet VB auch ElseIfund Ruby verwendet elsif.
Daniel Vandersluis
6
und shell / bash benutzt elif
knittl
7
Python verwendet auch elif
gregghz

Antworten:

218

Aus dem PHP-Handbuch :

In PHP können Sie auch "else if" (in zwei Worten) schreiben, und das Verhalten wäre identisch mit dem von "elseif" (in einem einzigen Wort). Die syntaktische Bedeutung unterscheidet sich geringfügig (wenn Sie mit C vertraut sind, ist dies dasselbe Verhalten), aber unter dem Strich würden beide zu genau demselben Verhalten führen.

Im Wesentlichen verhalten sie sich gleich, entsprechen jedoch else iftechnisch einer verschachtelten Struktur wie folgt:

if (first_condition)
{

}
else
{
  if (second_condition)
  {

  }
}

Das Handbuch stellt außerdem fest:

Beachten Sie, dass elseif und else if nur bei Verwendung von geschweiften Klammern wie im obigen Beispiel genau gleich betrachtet werden. Wenn Sie einen Doppelpunkt verwenden, um Ihre if / elseif-Bedingungen zu definieren, dürfen Sie else if nicht in zwei Wörter trennen, da sonst PHP mit einem Analysefehler fehlschlägt.

Was bedeutet, dass in der normalen Kontrollstrukturform (dh unter Verwendung von Klammern):

if (first_condition)
{

}
elseif (second_condition)
{

}

entweder elseifoder else ifkann verwendet werden. Wenn Sie jedoch die alternative Syntax verwenden , müssen Sie Folgendes verwenden elseif:

if (first_condition):
  // ...
elseif (second_condition):
  // ...
endif;
Daniel Vandersluis
quelle
18
Gute Arbeit mit den Beispielschnipsel. Wenn überhaupt, ist die alternative Syntax alles, dass PHP einfach behandelt zu beweisen notwendig ist , else ifwie else { if {.
BoltClock
2
PHP behandelt nicht else ifals else { if {, sonst könnten Sie nicht tun if (0) { } else if (0) { } else { }...
Guido Hendriks
4
@GuidoHendriks: Es ist nicht so, dass einer wie der andere behandelt wird, es ist so, dass sie funktional gleichwertig sind. Ihr Beispiel entspricht dem verschachtelten Formular if (0) { } else { if (0) { } else { } }. Beachten Sie, dass der letzte elseBlock keine Mehrdeutigkeit aufweist , was bei vollständigen Verzweigungen immer der Fall ist (jeder ifhat eine else).
Outis
Hier ist ein weiteres Beispiel als Referenz php.net/manual/en/control-structures.elseif.php#115851
WhyAyala
Bei alternativem Synyax müssen Sie sich nur an 'Doppelpunkt' und Endif von Inner erinnern, wenn: if ($v1='1'): do_thing(); else: if($v1='b' ): do_another_thing(); else: do_smthing_else(); endif; endif; das Äquivalent von ist; if ($v1='1'): do_thing(); elseif($v1='b' ): do_another_thing(); else: do_smthing_else(); endif;
DDS
47

Die Framework Interoperability Group (FIG), die sich aus Mitgliedern zusammensetzt, zu denen die Entwickler von Zend gehören ( https://github.com/php-fig/fig-standards#voting-members ), hat eine Reihe von Standardempfehlungen (PSR) zusammengestellt - #).

Zend2 und Symfony2 folgen bereits PSR-0.

Es gibt keine festen Regeln für Stile, aber Sie können versuchen, so viel PSR-2 wie möglich zu befolgen.

Es gibt einen Kommentar zu else if vs elseif in PSR-2:

Das Schlüsselwort elseif SOLLTE anstelle von else verwendet werden, wenn alle Steuerschlüsselwörter wie einzelne Wörter aussehen.

https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md#51-if-elseif-else

Einige der Empfehlungen sind genau das, Empfehlungen. Es liegt an Ihnen, ob Sie else if oder elseif verwenden möchten

James Cowhen
quelle
4
Vielen Dank, dass Sie auf die Keywords-as-One-Word-Richtlinie hingewiesen haben.
Theodore R. Smith