2011-01-11 11 views
14

Zastanawiam się, różnica między elseif i else if.Podstawowa różnica między cudzysłowem a innym użytkownikiem w przypadku, gdy

Czytałem the manual, który mówi, że jeśli używasz nawiasów klamrowych {} są one traktowane tak samo, ale tylko elseif działa, gdy nie używać nawiasów klamrowych.

również inny contributer powiedział:

Zauważ, że} elseif() {jest nieco szybciej niż} else if() {

i cofnął go z testów.

Dla mnie wydaje się elseif jest prawdziwym sposobem na powiedzenie go i mówiąc:

else if() {...} 

jest naprawdę odpowiednik:

else { if() {...} } 

co może wyjaśniać, dlaczego jej nieznacznie wolniej.

Jestem przyzwyczajony do korzystania z else if, ponieważ w ten sposób robię to także w innych językach. Naprawdę nie sądzę, że to ma znaczenie w jaki sposób to wpisujesz (chyba że nie używasz aparatu ortodontycznego .. ale myślę, że zawsze dobrze jest używać zamków w każdym razie) Byłem po prostu ciekawy podstawowych szczegółów.

Czy mam rację?

+3

Patrz odpowiedź na to pytanie: http://stackoverflow.com/questions/3662412/are-elseif-and-else-if-completely-synonymous Nie obejmuje wydajność, ale może * sugerować, że PHP traktuje 'else if' jako' else {if} '. – BoltClock

+0

To pytanie z pewnością jest kopią mojego oryginału. –

+2

Możliwy duplikat [Are "elseif" i "else if" jest całkowicie synonimem?] (Http://stackoverflow.com/questions/3662412/are-elseif-and-else-if-completely-synonymous) – Kuttoozz

Odpowiedz

7

Oprócz mojego komentarza, z tego, co widzę w źródle PHP, jedynym zwiększeniem prędkości jest to, że parser PHP ma specjalny token dla elseif, co nie jest zaskakujące jako T_ELSEIF. Ale jestem pewien, że zwiększenie prędkości nie jest niczym więcej niż tylko efekt uboczny pozwalając elseif w alternatywnej składni:

if (cond1): 
    // Do something 
elseif (cond2): 
    // Do something else 
else: 
    // Do something else 
endif; 

Podobny do Pythona, który korzysta elif, else if z przestrzeni nie byłoby dopuszczalne bez konieczności niepotrzebnie komplikuje kod implementacji parsera (tj. działa inaczej w stosunku do dwukropka i słowa kluczowego if). Tak więc dwukropek jest wymagany bezpośrednio po odpowiednio else i if i tak jest określona reguła językowa.

Ergo Jestem pewien, że PHP po prostu traktuje else if jako blok warunkowy w pojedynczej instrukcji else.

Jeśli występują różnice prędkości na wszystkich, zrób parser dla większości z nich.

+0

A jeśli się nie mylę, PHP w ogóle nie powinno zajmować przestrzeni. – Shoe

+0

@Charlie Pigarelli: Whitespace nie jest problemem, to fakt, że alternatywna składnia języka Python i PHP dławi je po wyświetleniu 'if' zamiast dwukropka po' else'. – BoltClock

1

"Różnica prędkości" w tym komentarzu nie jest statystycznie istotna. Oprócz else if: nie parsowania, nie ma skutecznej różnicy.

0

Co do wydajności i na podstawie tego, czego się uczyłem przez długi czas. Nie ma różnicy.

+2

Might as well share twoje wyniki, aby potwierdzić. – Aziz

4

W Manual czytałem (patrz uwaga):

Uwaga: Należy pamiętać, że elseif i else if będą rozpatrywane dokładnie samo tylko przy użyciu nawiasów klamrowych jak w powyższym przykładzie. Używając dwukropka do zdefiniowania warunków if/elseif, nie można rozdzielać innych na inne słowa, lub PHP nie powiedzie się z błędem analizy.

Przykład:

<?php 

/* Incorrect Method: */ 
if($a > $b): 
    echo $a." is greater than ".$b; 
else if($a == $b): // Will not compile. 
    echo "The above line causes a parse error."; 
endif; 


/* Correct Method: */ 
if($a > $b): 
    echo $a." is greater than ".$b; 
elseif($a == $b): // Note the combination of the words. 
    echo $a." equals ".$b; 
else: 
    echo $a." is neither greater than or equal to ".$b; 
endif; 

?> 
Powiązane problemy