<?= ?>
Ostatnio natknąłem się na ten tag PHP i niechętnie go używam, ale swędzi tak mocno, że chciałem, żebyś się z nim zgodził. Wiem, że jest złą praktyką do wykorzystywania krótkich znaczników <? ?>
i że powinniśmy używać pełnych tagów <?php ?>
zamiast, ale co z tego: <?= ?>
?
Oszczędziłoby to trochę pisania i byłoby lepiej dla czytelności kodu, IMO. Zamiast tego:
<input name="someVar" value="<?php echo $someVar; ?>">
Mógłbym napisać to w ten sposób, co jest czystsze:
<input name="someVar" value="<?= $someVar ?>">
Czy używanie tego operatora jest niezadowolone?
echo
bardzo łatwo prowadzi do XSS i powinieneś lepiej polegać na kontekstowej metodzie echa (tj. Posiadaniu afunction html($x) { echo htmlentities($x,...); }
i unhtml($someVar);
zamiastecho $someVar
lub używaniuecho json_encode($x);
w kontekście JS). To sprawia, że<?=
tagi są złą praktyką, ponieważ oznacza to, że zmieniono kod HTML zawartości zmiennej w innym miejscu, i że w innym miejscu musi magicznie wiedzieć, że ta zmienna musi być zmienna HTML, ponieważ jest wyświetlana w kontekście HTML.Odpowiedzi:
Historia
Zanim pociąg dezinformacji odejdzie zbyt daleko od stacji, jest kilka rzeczy, które musisz zrozumieć na temat krótkich tagów PHP.
Podstawowym problemem związanym z krótkimi znacznikami PHP jest to, że PHP zdążyło wybrać tag (
<?
), który był używany przez inną składnię, XML .Po włączeniu tej opcji nie można było wyodrębnić deklaracji XML bez wyświetlania błędów składniowych:
Jest to duży problem, gdy zastanawiasz się, jak popularne jest analizowanie plików XML i zarządzanie nimi.
Co
<?=
?Chociaż
<?
powoduje konflikty z XML,<?=
nie powoduje . Niestety, opcje włączania i wyłączania były powiązaneshort_open_tag
, co oznaczało, że aby skorzystać z krótkiego tagu echa (<?=
), trzeba było poradzić sobie z problemami krótkiego tagu otwartego (<?
). Problemy związane z krótkim otwartym tagiem były znacznie większe niż korzyści płynące z krótkiego tagu echa, więc znajdziesz półtora miliona rekomendacji doshort_open_tag
wyłączenia, które powinieneś .Jednak w PHP 5.4 krótki znacznik echa został ponownie włączony niezależnie od
short_open_tag
opcji. Widzę to jako bezpośrednie poparcie dla wygody<?=
, ponieważ nie ma w tym nic zasadniczo złego.Problem polega na tym, że nie możesz zagwarantować, że będziesz mieć,
<?=
jeśli spróbujesz napisać kod, który mógłby działać w szerszej gamie wersji PHP.ok, więc teraz to już wszystko
Powinieneś użyć
<?=
?źródło
<?=
w przyszłości, możesz to naprawić w mniej niż minutę, bez względu na to, ile tysięcy plików z niego korzysta, po prostu przeszukujesz i zamieniasz<?=
dla całego projektu<?php echo
. Moja odpowiedź brzmi : nie martw się i po prostu ją wykorzystaj , korzyści przeważają nad konsekwencjami.<?=
nie jest już uważany za krótki tag, sam Rasmus Lerdorf bardzo się zaangażował.<?=
będą zawsze włączone ( stackoverflow.com/a/6064813/156257 ) i przez większość czasu były włączone. Możesz udowodnić, że się mylę, sprawdzając z hostem, czy: są wyłączone i używają PHP <5.3 oraz czy nie pozwalają na zastąpienie ustawienia przez użytkowników lub na specjalne życzenie; jeśli wszystkie poprzednie są fałszywe, to na pewno się martwcie<?=
.<?=
zostaną usunięte, ja też nie. Inni mogą być, a jeśli tak, to nie muszą z nich korzystać<?=
. Niektóre osoby mają irracjonalny lęk przed użyciem niektórych funkcji językowych ( takich jak pominięcie zamykania tagów w php ).Odkurzę mój kapelusz PHP
Zdecydowanie wolałbym używać
<?= $someVar ?>
bardziej gadatliwychecho
(po prostu osobistych preferencji). Tylko minusem AFAIK jest dla użytkowników, którzy są uruchomione pre-5.4.0, w którym to przypadkushort_open_tag
musi być włączony w pliku php.ini .Powiedziawszy to, jeśli twój projekt nie jest systemem operacyjnym, jest to kwestia sporna. Jeśli tak, udokumentuję fakt, że
short_open_tag
s musi być włączony, lub użyję bardziej przenośnego z tych dwóch rozwiązań.źródło
<?=
nie ma na to wpływushort_open_tag
,<?
nadal tak jest, a jeśli masz zwyczaj używania krótkich znaczników, łatwo jest zapomnieć o tym, co jest obsługiwane w jakiej wersji.<?=
jako „Teraz wypisuję zmienną” do użycia w stylu szablonu i<?php
jako „Teraz uruchamiam dużo kodu”. Sugeruję, aby nigdy nie używać<?
, ale zarówno<?=
i<?php
są w porządku.Należy zdecydowanie unikać krótkich tagów formularza, czy to
<?
lub<?=
.Głównym powodem technicznym jest przenośność, nigdy nie możesz być pewien, że tagi skrócone będą działać dla każdej konfiguracji, ponieważ można je wyłączyć, poszukaj
short_open_tag
dyrektywy. Ale zawsze możesz być absolutnie pewien, że długa forma będzie działać wszędzie.To także zły nawyk. Naprawdę nie mogę ci powiedzieć, co uważasz za bardziej czytelne, ale jestem gorliwie przeciwny używaniu czytelności kodu jako wymówki, aby zaoszczędzić sobie kilku naciśnięć klawiszy. Jeśli obawiasz się o czytelność, powinieneś wybrać silnik szablonów, to:
jest znacznie bardziej czytelny z obu twoich przykładów.
Na koniec warto zauważyć, że tagi krótkich formularzy są wyraźnie odradzane przez duże projekty PHP, na przykład PEAR i Zend Framework .
źródło
<?php
iecho
zamiast<?
i<?=
, że nie można liczyć jako poważny czas? A co się stanie, gdy przeniesiesz projekt na serwer, na którym z jakiegoś powodu krótkie tagi są wyłączone?Dokumentacja PHP wyraźnie mówi, że możesz bezpiecznie używać krótkich znaczników echa:
5.4.0 The tag <?= is always available regardless of the short_open_tag ini setting.
Chociaż dotyczy to wersji PHP 5.4 i nowszych, ale każdy powinien przynajmniej z niej skorzystać. Wolałbym je tylko do celów szablonowych.
źródło
Powody używania krótkich tagów:
Powody nieużywania krótkich tagów:
źródło
Myślę, że
<?=
wersja jest dobrą / akceptowalną praktyką, pod warunkiem, że używasz jej tylko do ostatecznego generowania zmiennych i unikasz wywołań funkcji lub logiki trójskładnikowej, które nie są bezpośrednio związane z prezentacją danych.Z pewnością jest znacznie lepszy niż
<? echo($x); ?>
wszędzie.W dłuższej perspektywie warto przyjrzeć się silnikom szablonów, takim jak Smarty .
źródło
Począwszy od PHP 7.4, pole gry nieco się zmienia:
<? ?>
jest oficjalnie przestarzałe i zostanie usunięty w PHP 8.0.PHP RFC: Przestarzałe PHP Krótkie otwarte tagi wyraźnie stwierdzają, że
<?= ?>
nie ma to wpływu. Oznaczałoby to (według mnie, nie RFC), że jego użycie nie jest odradzane.źródło
Szczerze mówiąc, myślę, że powtórzenie wyniku, bez względu na metodę (stara lub nowa moda), jest czymś dość przestarzałym, podczas gdy MVC świętuje już 33 lata.
Powiedziałbym, że tak, jest to dobra praktyka, aby kapsułkować przychodzące dane serwera (php) w dokumencie XML i przetwarzać je w warstwie aplikacyjnej / klienckiej, oszczędzając Ci nawet pomysłu użycia takiego znacznika.
źródło