Oczywiście {}jest lepsze i : endif;jest okrucieństwem, którego nie byłoby, gdyby życie było sprawiedliwe. Z dobrym edytorem tekstu będziesz mieć skrót klawiaturowy do pasujących nawiasów, aby przeskoczyć od początku do końca lub odwrotnie. Żadna taka rzecz nie istnieje i nigdy nie mogłaby istnieć dla tej ohydnej : endif;składni.
developerwjk
3
@developerwjk jak mogłoby to nigdy nie istnieć?
Alex
Odpowiedzi:
177
Są takie same, ale druga jest świetna, jeśli masz MVC w swoim kodzie i nie chcesz mieć wielu ech w swoim kodzie. Na przykład w moich .phtmlplikach (Zend Framework) napiszę coś takiego:
<?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 Będzie to działać również z nawiasami klamrowymi, ale przynajmniej osobiście uważam, że ten sposób jest bardziej przejrzysty w takich sprawach. Bo wiecie, że to koniec „jeśli”, a nie koniec jakiejś pętli czy czegoś innego. Myślisz, że masz koniec i koniec lub coś podobnego.
Svish
10
Nie użyłbym <? =?>, Ponieważ nie jest on obsługiwany na wszystkich serwerach, szczególnie tych, które nie pozwalają na zmianę php.ini.
Siqi Lin
2
Istotnym punktem jest <? Php endif; ?> - możesz dokładnie powiedzieć, co się kończy, nawet wieloma liniami kodu HTML pomiędzy poprzednią instrukcją if / else a tą instrukcją.
Fenton
7
dlaczego „druga jest świetna, jeśli nie chcesz mieć wielu ech w swoim kodzie”? Myślę, że to samo dotyczy tradycyjnej składni {}. Nie jest potrzebne żadne dodatkowe echo <?php if(...){ ?> ... <?php }else{ ?> ... <?php } ?>. Jaka jest różnica <?php if(...): ?> ... <?php else: ?> ... <?php endif ?>?
Sithu,
9
Nie jestem pewien, dlaczego ta odpowiedź jest najwyższa, ponieważ nie jest to świetny przykład (dokładnie to samo można osiągnąć z nawiasami klamrowymi).
Reinier Kaper
69
Osobiście naprawdę nienawidzę alternatywnej składni. Jedną z fajnych rzeczy w nawiasach klamrowych jest to, że większość IDE, vimów itp. Ma podświetlanie nawiasów. W moim edytorze tekstu mogę dwukrotnie kliknąć nawias klamrowy, a podświetli on cały fragment, dzięki czemu mogę bardzo łatwo zobaczyć, gdzie się kończy i zaczyna.
Nie znam ani jednego edytora, który potrafiłby wyróżnić endif, endforeach itp.
Ma to być używane w szablonach PHP, w których początek i koniec bloku są oddzielone kawałkiem języka obcego. Jeśli twoje IDE rozumie PHP na tyle dobrze, aby go przeanalizować, powinno również endifpoprawnie wyróżnić się jako koniec bloku. Jeśli tak nie jest, tak naprawdę nie kupujesz niczego za pomocą, }ponieważ i tak nie będzie pasować.
Pavel Minaev
2
Większość ide (przynajmniej tych, których użyłem) wyróżnia tylko {}
AntonioCS,
11
Netbeans 7.x szczęśliwie podkreśla pasujące endforeach, endif itp.
Jonathan Day
@Pan. Minaev: Dopasowanie nawiasów klamrowych będzie poprawnie analizować prawdopodobnie w 98% przypadków, nawet jeśli zawiera obcy kod. Nie powiedzie się tylko wtedy, gdy w środku znajduje się klamra ezoteryczna „otwierająca, ale nie zamykająca”. Tak, zdarza się, ale zdarza się to rzadko. Dlaczego myślisz, że złożone „koniec-cokolwiek”; podejście parsera sprawdzi się praktycznie lepiej niż proste rozwiązanie?
PatlaDJ
Myślę, że najważniejszą kwestią jest opisywanie , gdy jest to potrzebne. Dzięki temu możemy łatwo sprawdzić, gdzie był otwarty, niezależnie od tego, jakiego narzędzia będziemy potrzebować. Szczególnie dotyczy PHP, które od czasu do czasu trzeba zobaczyć przy użyciu najbardziej uproszczonych edytorów.
cregox
49
Myślę, że to mówi wszystko:
ta alternatywna składnia jest doskonała do poprawy czytelności (zarówno dla PHP, jak i HTML!) w sytuacjach, gdy masz ich połączenie.
Podczas mieszania HTML i PHP alternatywny sytnax jest znacznie łatwiejszy do odczytania. W normalnych dokumentach PHP powinna być używana tradycyjna składnia.
Ale jeśli endifjest zbyt daleko od korespondenta if, myślę, że znacznie lepszą praktyką jest podanie do niego komentarza. Abyś mógł łatwo sprawdzić, gdzie był otwarty. Bez względu na język:
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
To faktycznie odnosi się do każdego analogicznego „zamknięcia”! ;)
Ogólnie rzecz biorąc, redaktorzy lepiej radzą sobie z nawiasami klamrowymi, w tym sensie, że mogą wskazać, gdzie był otwarty. Ale nawet to nie sprawia, że opisowe komentarze są mniej ważne.
zgadzam się, że jest znacznie lepiej - zamiast wpisywać endif - możesz powiedzieć, co faktycznie robi warunek if.
kartalot
@cartalot być może byłoby nawet fajnie mieć wbudowany w język (jako opcjonalny zamykający argument nazwanego bloku), więc moglibyśmy mieć błędy przy zamykaniu niewłaściwych bloków w niewłaściwych miejscach! :)
Jest to szczególnie przydatne w przypadku długich instrukcji sterujących, w których możesz nie być w stanie zobaczyć górnej deklaracji z dolnego nawiasu klamrowego.
Myślę, że to naprawdę zależy od Twojego osobistego stylu kodowania. Jeśli jesteś przyzwyczajony do C ++, Javascript itp., Możesz czuć się bardziej komfortowo, używając składni {}. Jeśli jesteś przyzwyczajony do Visual Basic, możesz użyć if: endif; składnia.
Nie jestem pewien, czy można definitywnie powiedzieć, że jedno jest łatwiejsze do odczytania niż drugie - to osobiste preferencje. Zwykle robię coś takiego:
to kwestia opinii. Rozumiem, dlaczego niektórzy uważają, że druga droga jest łatwiejsza - ale tylko wtedy, gdy przez całe życie nie programowałeś w Javascript i C ++. :)
Nie, nawiasy są obiektywnie łatwiejsze do odczytania (jeśli nie używasz wersji egipskiej). Nawet jeśli robisz nawiasy tak, że chodzą jak Egipcjanin, jest to łatwiejsze do odczytania niż składnia VB, ponieważ nowoczesne edytory tekstu będą miały funkcję dopasowywania nawiasów, aby przejść od nawiasu otwierającego do zamykającego lub na odwrót. W żaden sposób nie mogliby mieć funkcji dopasowywania składni VB. Musisz także wziąć pod uwagę zagnieżdżenie, a VB zawodzi na tym żałośnie.
developerwjk
5
Korzystałbym z pierwszej opcji, jeśli to w ogóle możliwe, niezależnie od nowej opcji. Składnia jest standardowa i wszyscy o tym wiedzą. Jest również kompatybilny wstecz.
Ale: Jeśli chcesz używać PHP jako języka szablonów w swoich plikach widoku (V z MVC), możesz użyć tej alternatywnej składni do rozróżnienia między kodem php napisanym w celu implementacji logiki biznesowej (części kontrolera i modelu MVC) a przewodnikiem logika. Oczywiście nie jest to obowiązkowe i możesz użyć dowolnej składni.
Nie ma technicznej różnicy między tymi dwiema składniami. Alternatywna składnia nie jest nowa; był obsługiwany co najmniej od PHP 4, a może nawet wcześniej.
Możesz preferować alternatywną formę, ponieważ wyraźnie określa, która struktura kontrolna się kończy: endwhilena przykład może zakończyć tylko whileblok, podczas gdy jeśli napotkasz nawias klamrowy, może to zamknąć wszystko.
Możesz jednak preferować tradycyjną składnię, jeśli używasz edytora, który ma specjalne wsparcie dla nawiasów klamrowych w innych składniach podobnych do języka C. Na przykład Vim obsługuje kilka naciśnięć klawiszy do nawigacji do pasujących nawiasów klamrowych oraz do początku i końca bloków rozdzielanych nawiasami. Alternatywna składnia złamałaby tę funkcję edytora.
Dobry edytor tekstu będzie miał skrót do dopasowywania nawiasów, który przeniesie Cię do miejsca, w którym się zaczął. Jej endif;, że będzie trudno znaleźć początek, ponieważ nie będą one miały podobną funkcję, która i kod VB-Styl nie gniazdo dobrze.
developerwjk
3
Wszystko zależy, osobiście wolę tradycyjną składnię z echami i dużą ilością wcięć, ponieważ jest o wiele łatwiejsza do odczytania.
<?php
if($something){
doThis();}else{
echo '<h1>Title</h1>
<p>This is a paragraph</p>
<p>and another paragraph</p>';}?>
Zgadzam się, że składnia alt jest bardziej przejrzysta dzięki różnym klauzulom końcowym, ale naprawdę ciężko mi sobie z nimi radzić bez pomocy podświetlania w edytorze tekstu i po prostu nie jestem przyzwyczajony do oglądania „skondensowanego” kodu w ten sposób:
gdybyś przeczytał cały wątek: preferowana jest alternatywna składnia i znacznie <em> czystsza </em> podczas tworzenia szablonów lub używania języka obcego w widokach php
Juraj Blahunka
1
Kiedyś używałem nawiasów klamrowych dla warunków „jeśli, inaczej”. Jednak znalazłem „if (xxx): endif;” jest bardziej semantyczny, jeśli kod jest mocno zawinięty i łatwiejszy do odczytania w jakimkolwiek edytorze.
Oczywiście wielu edytorów jest w stanie rozpoznać i podświetlić fragmenty kodu po wybraniu nawiasów klamrowych. Niektóre radzą sobie również dobrze z parą „if (xxx): endif” (np. NetBeans)
Osobiście polecałbym „if (xxx): endif”, ale w przypadku małego sprawdzenia stanu (np. Tylko jednej linii kodu) nie ma zbyt wielu różnic.
Wydaje mi się, że żadna z istniejących wcześniej odpowiedzi w pełni nie identyfikuje odpowiedzi tutaj, więc zamierzam wyartykułować własną perspektywę. Funkcjonalnie obie metody są takie same. Jeśli programista jest zaznajomiony z innymi językami stosującymi składnię C, prawdopodobnie będzie czuł się bardziej komfortowo z nawiasami klamrowymi, albo jeśli php jest pierwszym językiem, którego się uczy, będzie czuł się bardziej komfortowo ze ifendifskładnią, ponieważ wydaje się być bliższa do zwykłego języka.
Jeśli jesteś naprawdę poważnym programistą i chcesz szybko załatwić sprawę, to uważam, że składnia nawiasów klamrowych jest lepsza, ponieważ oszczędza czas pisania
if(/*condition*/){/*body*/}
w porównaniu do
if(/*condition*/):/*body*/
endif;
Jest to szczególnie prawdziwe w przypadku innych pętli, powiedzmy a, w foreachktórych w końcu wpisujesz dodatkowe 10 znaków. W przypadku nawiasów klamrowych wystarczy wpisać dwa znaki, ale w przypadku składni opartej na słowach kluczowych należy wpisać całe dodatkowe słowo kluczowe dla każdej pętli i instrukcji warunkowej.
} } } }
(które można również zrobićendif
) i chcesz wiedzieć, gdzie były otwarte? Odpowiedź brzmi: żadne . Jest to w zasadzie pierwsza „zasada” zasad projektowania w Pythonie .{}
jest lepsze i: endif;
jest okrucieństwem, którego nie byłoby, gdyby życie było sprawiedliwe. Z dobrym edytorem tekstu będziesz mieć skrót klawiaturowy do pasujących nawiasów, aby przeskoczyć od początku do końca lub odwrotnie. Żadna taka rzecz nie istnieje i nigdy nie mogłaby istnieć dla tej ohydnej: endif;
składni.Odpowiedzi:
Są takie same, ale druga jest świetna, jeśli masz MVC w swoim kodzie i nie chcesz mieć wielu ech w swoim kodzie. Na przykład w moich
.phtml
plikach (Zend Framework) napiszę coś takiego:źródło
{}
. Nie jest potrzebne żadne dodatkowe echo<?php if(...){ ?> ... <?php }else{ ?> ... <?php } ?>
. Jaka jest różnica<?php if(...): ?> ... <?php else: ?> ... <?php endif ?>
?Osobiście naprawdę nienawidzę alternatywnej składni. Jedną z fajnych rzeczy w nawiasach klamrowych jest to, że większość IDE, vimów itp. Ma podświetlanie nawiasów. W moim edytorze tekstu mogę dwukrotnie kliknąć nawias klamrowy, a podświetli on cały fragment, dzięki czemu mogę bardzo łatwo zobaczyć, gdzie się kończy i zaczyna.
Nie znam ani jednego edytora, który potrafiłby wyróżnić endif, endforeach itp.
źródło
endif
poprawnie wyróżnić się jako koniec bloku. Jeśli tak nie jest, tak naprawdę nie kupujesz niczego za pomocą,}
ponieważ i tak nie będzie pasować.Myślę, że to mówi wszystko:
http://ca3.php.net/manual/en/control-structures.alternative-syntax.php
Podczas mieszania HTML i PHP alternatywny sytnax jest znacznie łatwiejszy do odczytania. W normalnych dokumentach PHP powinna być używana tradycyjna składnia.
źródło
W naszej firmie preferowanym sposobem obsługi HTML jest:
W końcu to naprawdę kwestia wyboru jednego i trzymania się go.
źródło
<?php if(TRUE){?> test <?php }?> <?php else{ ?> test2 <?php }?>
Rzeczywiście, funkcjonalnie są takie same.
Ale jeśli
endif
jest zbyt daleko od korespondentaif
, myślę, że znacznie lepszą praktyką jest podanie do niego komentarza. Abyś mógł łatwo sprawdzić, gdzie był otwarty. Bez względu na język:To faktycznie odnosi się do każdego analogicznego „zamknięcia”! ;)
Ogólnie rzecz biorąc, redaktorzy lepiej radzą sobie z nawiasami klamrowymi, w tym sensie, że mogą wskazać, gdzie był otwarty. Ale nawet to nie sprawia, że opisowe komentarze są mniej ważne.
źródło
Tutaj można go znaleźć w oficjalnej dokumentacji: PHP: Alternatywna składnia struktur sterujących
źródło
Myślę, że jest to szczególnie wyraźne, gdy używasz kombinacji
if
s,for
s iforeach
es w skryptach widoku:w przeciwieństwie do:
Jest to szczególnie przydatne w przypadku długich instrukcji sterujących, w których możesz nie być w stanie zobaczyć górnej deklaracji z dolnego nawiasu klamrowego.
źródło
Myślę, że to naprawdę zależy od Twojego osobistego stylu kodowania. Jeśli jesteś przyzwyczajony do C ++, Javascript itp., Możesz czuć się bardziej komfortowo, używając składni {}. Jeśli jesteś przyzwyczajony do Visual Basic, możesz użyć if: endif; składnia.
Nie jestem pewien, czy można definitywnie powiedzieć, że jedno jest łatwiejsze do odczytania niż drugie - to osobiste preferencje. Zwykle robię coś takiego:
Czy jest to łatwiejsze do odczytania niż:
to kwestia opinii. Rozumiem, dlaczego niektórzy uważają, że druga droga jest łatwiejsza - ale tylko wtedy, gdy przez całe życie nie programowałeś w Javascript i C ++. :)
źródło
Korzystałbym z pierwszej opcji, jeśli to w ogóle możliwe, niezależnie od nowej opcji. Składnia jest standardowa i wszyscy o tym wiedzą. Jest również kompatybilny wstecz.
źródło
Obie są takie same.
Ale: Jeśli chcesz używać PHP jako języka szablonów w swoich plikach widoku (V z MVC), możesz użyć tej alternatywnej składni do rozróżnienia między kodem php napisanym w celu implementacji logiki biznesowej (części kontrolera i modelu MVC) a przewodnikiem logika. Oczywiście nie jest to obowiązkowe i możesz użyć dowolnej składni.
ZF stosuje to podejście.
źródło
Nie ma technicznej różnicy między tymi dwiema składniami. Alternatywna składnia nie jest nowa; był obsługiwany co najmniej od PHP 4, a może nawet wcześniej.
Możesz preferować alternatywną formę, ponieważ wyraźnie określa, która struktura kontrolna się kończy:
endwhile
na przykład może zakończyć tylkowhile
blok, podczas gdy jeśli napotkasz nawias klamrowy, może to zamknąć wszystko.Możesz jednak preferować tradycyjną składnię, jeśli używasz edytora, który ma specjalne wsparcie dla nawiasów klamrowych w innych składniach podobnych do języka C. Na przykład Vim obsługuje kilka naciśnięć klawiszy do nawigacji do pasujących nawiasów klamrowych oraz do początku i końca bloków rozdzielanych nawiasami. Alternatywna składnia złamałaby tę funkcję edytora.
źródło
W końcu po prostu nie chcesz szukać następującego wiersza, a następnie zgadywać, gdzie się zaczął:
Technicznie i funkcjonalnie są takie same.
źródło
endif;
, że będzie trudno znaleźć początek, ponieważ nie będą one miały podobną funkcję, która i kod VB-Styl nie gniazdo dobrze.Wszystko zależy, osobiście wolę tradycyjną składnię z echami i dużą ilością wcięć, ponieważ jest o wiele łatwiejsza do odczytania.
Zgadzam się, że składnia alt jest bardziej przejrzysta dzięki różnym klauzulom końcowym, ale naprawdę ciężko mi sobie z nimi radzić bez pomocy podświetlania w edytorze tekstu i po prostu nie jestem przyzwyczajony do oglądania „skondensowanego” kodu w ten sposób:
źródło
Kiedyś użyłem nawiasów klamrowych, ale teraz wolę używać tej alternatywnej składni krótkiej ręki ze względu na czytelność kodu i dostępność.
źródło
Osobiście wolę zrobić to w dwóch oddzielnych sekcjach, ale w tym samym PHP, na przykład:
Ale może jest wolniejszy?
źródło
Myślę, że to kwestia preferencji. Osobiście używam:
źródło
Kiedyś używałem nawiasów klamrowych dla warunków „jeśli, inaczej”. Jednak znalazłem „if (xxx): endif;” jest bardziej semantyczny, jeśli kod jest mocno zawinięty i łatwiejszy do odczytania w jakimkolwiek edytorze.
Oczywiście wielu edytorów jest w stanie rozpoznać i podświetlić fragmenty kodu po wybraniu nawiasów klamrowych. Niektóre radzą sobie również dobrze z parą „if (xxx): endif” (np. NetBeans)
Osobiście polecałbym „if (xxx): endif”, ale w przypadku małego sprawdzenia stanu (np. Tylko jednej linii kodu) nie ma zbyt wielu różnic.
źródło
Wydaje mi się, że żadna z istniejących wcześniej odpowiedzi w pełni nie identyfikuje odpowiedzi tutaj, więc zamierzam wyartykułować własną perspektywę. Funkcjonalnie obie metody są takie same. Jeśli programista jest zaznajomiony z innymi językami stosującymi składnię C, prawdopodobnie będzie czuł się bardziej komfortowo z nawiasami klamrowymi, albo jeśli php jest pierwszym językiem, którego się uczy, będzie czuł się bardziej komfortowo ze
if
endif
składnią, ponieważ wydaje się być bliższa do zwykłego języka.Jeśli jesteś naprawdę poważnym programistą i chcesz szybko załatwić sprawę, to uważam, że składnia nawiasów klamrowych jest lepsza, ponieważ oszczędza czas pisania
w porównaniu do
Jest to szczególnie prawdziwe w przypadku innych pętli, powiedzmy a, w
foreach
których w końcu wpisujesz dodatkowe 10 znaków. W przypadku nawiasów klamrowych wystarczy wpisać dwa znaki, ale w przypadku składni opartej na słowach kluczowych należy wpisać całe dodatkowe słowo kluczowe dla każdej pętli i instrukcji warunkowej.źródło