PHPでヒアドキュメントを使用する利点は何ですか?例を示していただけますか?
5 に答える
ヒアドキュメントの構文は私にとってはずっとすっきりしていて、複数行の文字列を作成したり、引用符の問題を回避したりするのに非常に役立ちます。昔は、それらを使用して 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;
ちょっとしたスタイルですが、文字列を定義するためのシングル、ダブル、およびヒアドキュメントのルールとして次を使用します。
- 文字列が次のような定数の場合、単一引用符が使用されます
'no variables here'
- 文字列を 1 行に配置でき、変数の補間または埋め込みの単一引用符が必要な場合は二重引用符
"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 はその言語の構文を強調表示しません。これにより、可読性が低下し、メンテナンスがより困難になります。
あなたの常識に対する回答を更新しました
もちろん、HTML として強調表示された SQL クエリを見たいとは思わないでしょう。他の言語を使用するには、構文で言語を変更するだけです。
$sql = <<<SQL
SELECT * FROM table
SQL;
一部の IDE では、ヒアドキュメント文字列内のコードが自動的に強調表示されます。これにより、XML または HTML にヒアドキュメントを使用することが視覚的に魅力的になります。
個人的には、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';
ヒアドキュメントが怠惰だと言うかどうかはわかりません。何をするにも面倒な方法が常にあるので、何かをすることは怠惰であると言えます。
たとえば、特定の状況では、ファイルから取得してテンプレートの置換を実行することなく、埋め込み変数を使用してテキストを出力したい場合があります。Heredoc を使用すると、引用符をエスケープする必要がなくなるため、表示されるテキストが出力されるテキストになります。明らかに、いくつかの欠点があります。たとえば、ヒアドキュメントをインデントできないなど、特定の状況でイライラする可能性があります。特に、統一された構文に固執している場合はそうです。