2009-09-08 7 views
13

prostu do wyjaśnienia: Kwestie „echo vs druku” i „podwójnych cudzysłowów vs pojedyncze cudzysłowy” są doskonale zrozumiałe, to jest o inny rzecz:php echo vs Otwórz & ścisłej tagu

Czy są jakieś powody, dla których można by preferuję:

echo '<table>'; 
foreach($lotsofrows as $row) 
{ 
    echo '<tr><td>',$row['id'],'</td></tr>'; 
} 
echo '<table>'; 

przez:

<table><?php 
     foreach($lotsofrows as $row) 
     { ?> 
      <tr> 
       <td><?php echo $row['id']; ?></td> 
      </tr><?php 
     } ?> 
</table> 

by wykonać jeden albo/analizowania szybciej? jest bardziej elegancki? (itp.)

Używam drugiej opcji, ale obawiam się, że mogę przeoczyć coś oczywistego/niezbędnego.

+0

Dziękuję za wszystkie komentarze, zdaję sobie sprawę, że to nie jest pytanie, które ma odpowiedź, ale niektórzy zwracają uwagę, że nie ma nic oficjalnego w podręcznikach PHP, a dostarczone informacje zwrotne były niezwykle użyteczne: byłem nieświadomy pierwsze opcje są znacznie bardziej czytelne niż drugie, więc będę nadal używać znaczników dla dużych bloków i zacznę używać "echo" dla krótkich. – Migs

+0

Zgadzam się z opinią na temat projektu. Jeśli masz dużo PHP i od czasu do czasu tag HTML, skorzystaj z pierwszego. Ale jeśli masz dużo HTML i sporadyczne polecenie PHP, użyj tego ostatniego (użyj HTML i trzymaj się tagów PHP tu i tam); * powinno * być szybsze, ponieważ znaczniki już istnieją jako literały, natomiast ich drukowanie oznacza przekazanie znaczników jako łańcuchów do funkcji print/echo, która następnie je wypisuje. Może to być sumą dla strony głównie HTML, ale nie będzie dużo dla strony głównie PHP. – Synetech

Odpowiedz

5

Pierwsza z nich jest znacznie bardziej czytelna, jednak druga z technicznego punktu widzenia wiąże się z mniejszą analizą. Każda przewaga prędkości w tym przypadku byłaby prawdopodobnie niewielka i naprawdę bez znaczenia, bez profilowania.

Przedwczesna optymalizacja jest źródłem wszelkiego zła. Rób to, co sprawia, że ​​kod jest najłatwiejszy do czytania i obsługi. Wydajność zajmuje tylne siedzenie w celu utrzymania sprawności.

zobaczyć http://en.wikipedia.org/wiki/Optimization_%28computer_science%29#When_to_optimize na kilka dobrych rad na temat

2

Najlepszym z nich jest system szablonów.

Ale myślę, że echo jest o wiele czystsze i bardziej czytelne (przynajmniej w tym przypadku - jak wskazano w komentarzach, to zależy), niż otwieranie i zamykanie tagów wszędzie (nie wiem zbyt wiele o wewnętrznym PHP powiedzieć, który z nich jest szybszy).

+1

Czytelność w dużym stopniu zależy od ilości tekstu wysyłanego przez 'echo', imho. Dla pojedynczego wiersza zamykanie i otwieranie tagów PHP to przesada ... dla kompletnego wiersza tabeli z, jak, 20 kolumnami, to inna historia. Również edytory tekstowe mogą podświetlać HTML poza tagami PHP, ale zazwyczaj nie w łańcuchach PHP. Ponownie, jest to głównie problem, jeśli istnieje * dużo * znaczników, które powinny być emitowane. – Joey

+0

Nadal uważam, że najlepszy jest silnik szablonów. :) Ale masz rację. –

+2

IMHO, jeśli używasz jakiegoś silnika MVC (i naprawdę powinieneś), system szablonów jest całkowicie bezużyteczny. Z tego, co widziałem w praktyce, systemy szablonów są używane przez projektantów stron internetowych, którzy nie znają wystarczająco PHP, aby zrozumieć, co robi kod lub przez programistów, którzy dopiero odkrywają wzór MVC. –

2

To bardzo niezawodne, co piszesz. PHP może być używany jako język programowania lub jako prosty i wszechstronny język szablonów internetowych. Mieszanie tych dwóch zastosowań jest bardzo, bardzo złą praktyką i będzie straszne, aby wspierać w dłuższej perspektywie.

Drugi styl jest bardziej przydatny w szablonach z dużą ilością znaczników HTML i małych kropek kodu, po pierwsze - dla "czystego" programowania php.

8

Korzyści z pierwszego

  • łatwiejsze do odczytania
  • ???

Korzyści z drugim

  • WYSIWYG jest możliwe
  • Kod HTML Zakończenie/Tag-Matching możliwe w niektórych IDE
  • ma ucieczki bóle głowy
  • Łatwiejsze dla większych kawałków HTML

Jeśli mam dużo HTML w danej procedurze PHP (jak w przypadku MVC), to zdecydowanie używam drugiej metody. Ale formatuję to inaczej - ściśle polegam na tagowym charakterze rozgraniczeń PHP, tj.Robię odcinki PHP wyglądać tak samo jak znaczniki HTML, jak mogę

<table> 
    <?php foreach($lotsofrows as $row) { ?> 
    <tr> 
    <td><?php echo $row['id']; ?></td> 
    </tr> 
    <?php } ?> 
</table> 
+0

Podoba mi się to jeszcze lepiej niż moja własna odpowiedź, więc +1 ode mnie :) –

2

Pierwszy z nich jest bardziej czytelny z programistycznego punktu widzenia, ale drugi pozwala otworzyć plik w jakimś edytorze WYSIWYG HTML i zmiany projekt strony.

Wolę drugą opcję, ponieważ jest o wiele łatwiej powiedzieć projektantowi, że „ta część strony będzie się zachowywał tak”, niż „ten kawałek kodu to robi”

+0

+1, drugie rozwiązanie ułatwia życie projektantom, którzy nie znają PHP i nie chcą się uczyć. Jednak optymalnym rozwiązaniem byłyby szablony, ale ... –

7

zgadzam się z Peter Bailey. Jednak w widokach używam alternatywnej składni dla instrukcji i dużo wolę krótkie tagi (szczególnie dla echa). Tak więc powyższy przykład mógłby zamiast tego przeczytać:

<table> 
    <? foreach($lotsofrows as $row): ?> 
    <tr> 
    <td><?= $row['id']; ?></td> 
    </tr> 
    <? endforeach; ?> 
</table> 

Uważam, że jest to preferowany standard dla Zend Framework.

+0

Dostałeś się tam przede mną;) Jest to składnia, której używam przez większość czasu (chociaż umieściłem to foreach na własnej linii). – DisgruntledGoat

+0

Witam, voidstate, zwykle unikałem krótkich tagów z powodu frazy dokumentacji: "Używając krótkich tagów należy unikać przy tworzeniu aplikacji lub bibliotek, które są przeznaczone do redystrybucji", ale potem znowu społeczność rozmawiała z większością głosów, co czy tęskniłem? – Migs

+0

Tam, gdzie pracuję, mam kontrolę nad serwerami, więc nie jest to dla mnie problemem i sprawia, że ​​widoki są bardziej czytelne IMO. Oto dokument Zend Framework: http://framework.zend.com/manual/en/zend.view.html # zend.view.introduction.shortTags To sugeruje zmieniające php_ini ustawienia w pliku .htaccess używając następującej: php_value „short_open_tag” „on” – voidstate