Jaka jest zaleta korzystania z heredoc w PHP i czy możesz pokazać przykład?
Jaka jest zaleta korzystania z heredoc w PHP i czy możesz pokazać przykład?
Odpowiedzi:
Składnia heredoc jest dla mnie o wiele czystsza i bardzo przydatna w przypadku ciągów wieloliniowych i unikania problemów z cytowaniem. Wcześniej użyłem ich do budowy zapytań SQL:
$sql = <<<SQL
select *
from $tablename
where id in [$order_ids_list]
and product_name = "widgets"
SQL;
Dla mnie ma to mniejsze prawdopodobieństwo wprowadzenia błędu składniowego niż użycie cudzysłowów:
$sql = "
select *
from $tablename
where id in [$order_ids_list]
and product_name = \"widgets\"
";
Inną kwestią jest unikanie podwójnych cudzysłowów w łańcuchu:
$x = "The point of the \"argument" was to illustrate the use of here documents";
PProblem z powyższym jest błędem składniowym (brakujący cytat), który właśnie wprowadziłem, w przeciwieństwie do składni dokumentu tutaj:
$x = <<<EOF
The point of the "argument" was to illustrate the use of here documents
EOF;
Jest to trochę stylowe, ale używam następujących reguł jako reguł dla pojedynczych, podwójnych i tutaj dokumentów do definiowania ciągów:
'no variables here'
"Today is ${user}'s birthday"
--ansi
trybie zgodności. Ciągi SQL muszą używać pojedynczych cudzysłowów.
SELECT * FROM "order" WHERE "table"='1'
Heredoc są doskonałą alternatywą dla cytowanych ciągów ze względu na zwiększoną czytelność i łatwość konserwacji. Nie musisz uciekać przed cudzysłowami, a (dobre) IDE lub edytory tekstu użyją odpowiedniego podświetlenia składni.
Bardzo powszechnym przykładem: echo z HTML z poziomu PHP:
$html = <<<HTML
<div class='something'>
<ul class='mylist'>
<li>$something</li>
<li>$whatever</li>
<li>$testing123</li>
</ul>
</div>
HTML;
// Sometime later
echo $html;
Jest łatwy do odczytania i łatwy w utrzymaniu.
Alternatywą jest powtarzanie cytowanych ciągów, które w końcu zawierają cytowane znaki, a IDE nie podkreślą składni tego języka, co prowadzi do słabej czytelności i większych trudności w utrzymaniu.
Zaktualizowana odpowiedź na Twój zdrowy rozsądek
Oczywiście nie chcesz, aby zapytanie SQL było podświetlone jako HTML. Aby użyć innych języków, wystarczy zmienić język w składni:
$sql = <<<SQL
SELECT * FROM table
SQL;
Niektóre środowiska IDE automatycznie podświetlają kod w ciągach heredoc - co sprawia, że użycie heredoc dla XML lub HTML jest wizualnie atrakcyjne.
Osobiście lubię to dla dłuższych części, np. XML, ponieważ nie muszę się troszczyć o cytowanie znaków cudzysłowu i mogę po prostu wkleić XML.
Przede wszystkim wszystkie przyczyny są subiektywne. To bardziej kwestia gustu niż powodu.
Osobiście uważam, że heredoc jest zupełnie bezużyteczny i używam go od czasu do czasu, przez większość czasu, gdy muszę wprowadzić trochę HTML do zmiennej i nie chcę zawracać sobie głowy buforowaniem danych wyjściowych, na przykład w celu utworzenia wiadomości e-mail w formacie HTML.
Formatowanie nie pasuje do ogólnych reguł wcięć, ale nie sądzę, żeby to była wielka sprawa.
//some code at it's proper level
$this->body = <<<HERE
heredoc text sticks to the left border
but it seems OK to me.
HERE;
$this->title = "Feedback";
//and so on
Jeśli chodzi o przykłady w zaakceptowanej odpowiedzi, to tylko oszustwo.
Przykłady strun są w rzeczywistości bardziej zwięzłe, jeśli się ich nie zdradzi
$sql = "SELECT * FROM $tablename
WHERE id in [$order_ids_list]
AND product_name = 'widgets'";
$x = 'The point of the "argument" was to illustrate the use of here documents';
Nie wiem, czy powiedziałbym, że heredoc to lenistwo. Można powiedzieć, że robienie czegokolwiek jest lenistwem, ponieważ zawsze istnieją bardziej nieporęczne sposoby.
Na przykład w niektórych sytuacjach możesz chcieć wyprowadzić tekst z osadzonymi zmiennymi bez konieczności pobierania z pliku i uruchamiania zamiany szablonu. Heredoc pozwala ci zrezygnować z cudzysłowów, więc tekst, który widzisz, to tekst, który wypisujesz. Oczywiście istnieją pewne negatywy, na przykład, nie możesz wciąć swojego heredoc, a to może stać się frustrujące w niektórych sytuacjach, szczególnie jeśli jesteś zwolennikiem jednolitej składni, którą jestem.