Coraz więcej mam do czynienia z cudzym kodem napisanym w PHP. Zauważyłem, że w wielu miejscach, nie wiem czy przez przypadek czy umyślnie, są tagi zamykające: ?> chociaż być nie powinny.
Tag zamykający powinniśmy używać wyłącznie w sytuacji, gdy poza PHP spodziewamy się czegoś innego, np. są to pliki widoku, w którym zagnieżdżamy wywołania, np.:
1 2 3 4 5 6 7 8 9 |
<h2><?php echo $page->name ?></h2> <php echo $page->content ?> <p>Tagi: <ul> <?php foreach($tags as $tag) : ??> <li><?php echo $tag->name ?></li> <?php endforeach ?> </ul> </p> |
Dlaczego? Powód jest jeden: błędy. Za tagiem zamykającym może zakraść nam się spacja, znak nowej linii lub inne białe znaki. A to automatycznie powoduje błąd Cannot modify header information – headers already sent, jeśli w kolejnych plikach operujemy na nagłówku strony (header(), setcookie()).
Gdy nasz projekt jest duży, a ktoś zostawi ?> ze spacją lub innym cudem możemy mieć spory problem w szukaniu błędu i stracić sporo czasu. Poza tym interpreter nie musi zastanawiać się co i jak, gdzie kod PHP się zaczyna, a gdzie kończy.
Dlatego dla wszystkich plików, które zawierają tylko PHP zalecam niestosowanie tagu zamykającego ?>, który przez PHP jest niewymagany.
Polecam Wam również zaznajomienie się z Zend Framework Coding Standard.