"Elseif" e "else if" sono completamente sinonimi?


170

Sono elseife else ifcompletamente sinonimo, o c'è una differenza?

Zend ha uno "standard" accettato su quale utilizzare?

Mentre personalmente non mi piace vedere elseifnel codice, devo solo sapere se sono sinonimi e il manuale di PHP non è il più facile da cercare.


10
A else ifproposito, non tutte le altre lingue usano . Ad esempio, VB utilizza anche ElseIfe utilizza Ruby elsif.
Daniel Vandersluis,

6
e shell / bash usa elif
knittl il

7
python usa anche elif
gregghz il

Risposte:


218

Dal manuale di PHP :

In PHP, puoi anche scrivere 'else if' (in due parole) e il comportamento sarebbe identico a quello di 'elseif' (in una sola parola). Il significato sintattico è leggermente diverso (se hai familiarità con C, questo è lo stesso comportamento) ma la linea di fondo è che entrambi comporterebbero esattamente lo stesso comportamento.

In sostanza, si comporteranno allo stesso modo, ma else ifè tecnicamente equivalente a una struttura nidificata in questo modo:

if (first_condition)
{

}
else
{
  if (second_condition)
  {

  }
}

Il manuale rileva inoltre:

Si noti che elseif e else if saranno considerati esattamente gli stessi quando si utilizzano parentesi graffe come nell'esempio precedente. Quando usi i due punti per definire le tue condizioni if ​​/ elseif, non devi separare else if in due parole, altrimenti PHP fallirà con un errore di analisi.

Ciò significa che nella normale forma della struttura di controllo (cioè utilizzando le parentesi graffe):

if (first_condition)
{

}
elseif (second_condition)
{

}

o elseifo else ifpuò essere utilizzato. Tuttavia, se si utilizza la sintassi alternativa , è necessario utilizzare elseif:

if (first_condition):
  // ...
elseif (second_condition):
  // ...
endif;

18
Ottimo lavoro con gli snippet di esempio. Semmai, la sintassi alternativa è tutto ciò che è necessario per dimostrare che PHP tratta semplicemente else ifcome else { if {.
BoltClock

2
PHP non tratta else ifcome else { if {, altrimenti non potresti farlo if (0) { } else if (0) { } else { }...
Guido Hendriks,

4
@GuidoHendriks: non è che uno sia trattato come l'altro, è che sono funzionalmente equivalenti. Il tuo esempio è equivalente al modulo nidificato if (0) { } else { if (0) { } else { } }. Nota che non c'è ambiguità nell'ultimo elseblocco, il che è sempre il caso di rami completi (ognuno ifha un else).
uscita il


Con synyax alternativo devi solo ricordare 'colon' e endif di inner se: if ($v1='1'): do_thing(); else: if($v1='b' ): do_another_thing(); else: do_smthing_else(); endif; endif; è l'equivalente di; if ($v1='1'): do_thing(); elseif($v1='b' ): do_another_thing(); else: do_smthing_else(); endif;
DDS

47

Il Framework Interoperability Group (FIG), composto da membri che includono gli sviluppatori di Zend ( https://github.com/php-fig/fig-standards#voting-members ), ha messo insieme una serie di raccomandazioni standard (PSR - #).

Zend2 e Symfony2 seguono già PSR-0.

Non ci sono regole rigide e veloci per gli stili, ma puoi provare a seguire più PSR-2 che puoi.

C'è un commento su else if vs elseif in PSR-2:

La parola chiave elseIF DOVREBBE essere usata al posto di else se così tutte le parole chiave di controllo sembrano parole singole.

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

Alcuni dei consigli sono proprio questo, consigli. Sta a te decidere se utilizzare else if o elseif


4
Grazie mille per aver indicato la linea guida per le parole chiave come una sola parola.
Theodore R. Smith,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.