PHPで Heredoc を使用する利点は何ですか?例を示すことができますか?
ここでのdoc構文は私にとってはずっときれいで、複数行の文字列や引用の問題を回避するのに非常に役立ちます。昔、私はそれらを使用してSQLクエリを作成していました。
$sql = <<<SQL
select *
from $tablename
where id in [$order_ids_list]
and product_name = "widgets"
SQL;
私にとって、これは引用符を使用するよりも構文エラーを引き起こす可能性が低いです:
$sql = "
select *
from $tablename
where id in [$order_ids_list]
and product_name = \"widgets\"
";
もう1つのポイントは、文字列内の二重引用符のエスケープを回避することです。
$x = "The point of the \"argument" was to illustrate the use of here documents";
上記の問題は、構文エラー(エスケープされた引用符が欠落している)であるため、ここで説明した構文とは対照的に、先ほど紹介したとおりです。
$x = <<<EOF
The point of the "argument" was to illustrate the use of here documents
EOF;
スタイルは少しですが、文字列を定義するためのsingle、double、hereドキュメントのルールとして次を使用します。
'no variables here'
のような定数の場合、引用符が使用されます"Today is ${user}'s birthday"
ヒアドキュメントは、可読性と保守性が向上しているため、引用文字列の優れた代替手段です。引用符をエスケープする必要はなく、(良い)IDEまたはテキストエディターは適切な構文強調表示を使用します。
非常に一般的な例:PHP内からHTMLをエコーアウトする:
$html = <<<HTML
<div class='something'>
<ul class='mylist'>
<li>$something</li>
<li>$whatever</li>
<li>$testing123</li>
</ul>
</div>
HTML;
// sometime later
echo $html;
読みやすい。メンテナンスが簡単。
別の方法は、引用符で囲まれた文字列をエコーすることです。これにはエスケープされた引用符が含まれ、IDEはその言語の構文を強調せず、読みにくくなり、メンテナンスが難しくなります。
あなたの常識の更新された答え
もちろん、SQLクエリをHTMLとしてハイライト表示したくないでしょう。他の言語を使用するには、構文の言語を変更するだけです。
$sql = <<<SQL
SELECT * FROM table
SQL;
一部のIDEは、heredoc文字列のコードを自動的に強調表示します。これにより、XMLまたはHTMLにheredocを使用して視覚的に魅力的です。
私は引用文字の引用を気にする必要がなく、XMLを貼り付けるだけなので、個人的にはXMLの長い部分で気に入っています。
まず第一に、すべての理由は主観的です。それは、理由というよりむしろ好みの問題のようです。
個人的には、ヒアドキュメントはまったく役に立たないと思いますが、たまに使用します。ほとんどの場合、HTMLを変数に入れる必要があり、たとえばHTMLメールメッセージを作成するために出力バッファリングに煩わされたくない場合です。
書式設定は一般的なインデント規則に適合しませんが、大したことではないと思います。
//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
受け入れられた答えの例に関しては、それは単に不正行為です。
実際、文字列の例は、カンニングをしないとより簡潔になります
$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';
ヒアドックが怠inessだと言うかどうかはわかりません。何かをするのはもっと面倒な方法があるので、何かをするのは怠lazだと言うことができます。
たとえば、特定の状況では、ファイルからフェッチしてテンプレート置換を実行することなく、変数が埋め込まれたテキストを出力することができます。 Heredocを使用すると、引用符をエスケープする必要がなくなるため、表示されるテキストは出力するテキストになります。明らかに、いくつかのネガがあります。たとえば、ヒアドキュメントをインデントできないため、特定の状況でイライラする可能性があります。特に、私が統一構文に固執している場合。