PHPでヒアドキュメントを使用する利点は何ですか?例を示すことができますか?
PHPでヒアドキュメントを使用する利点は何ですか?例を示すことができますか?
回答:
ヒアドキュメントの構文は私にはずっとすっきりしていて、複数行の文字列や引用の問題を回避するのにとても便利です。以前は、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";
上記のpProblemは、ここでのドキュメントの構文とは対照的に、先ほど紹介した構文エラー(エスケープされた引用符がない)です。
$x = <<<EOF
The point of the "argument" was to illustrate the use of here documents
EOF;
それは少しスタイルですが、文字列を定義するためのシングル、ダブル、ヒアドキュメントのルールとして次を使用します。
'no variables here'
"Today is ${user}'s birthday"
--ansi
準拠モードで実行されていない場合にのみ機能します。SQL文字列は一重引用符を使用する必要があります。
SELECT * FROM "order" WHERE "table"='1'
ヒアドキュメントは、可読性と保守性が向上しているため、引用文字列の優れた代替手段です。引用符をエスケープする必要はなく、(良い)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;
読みやすく、保守も簡単です。
もう1つの方法は、引用符で囲まれた文字列をエコーすることです。この文字列はエスケープされた引用符を含み、IDEはその言語の構文を強調表示しないため、読みやすさが低下し、メンテナンスが難しくなります。
あなたの常識の更新された答え
もちろん、SQLクエリがHTMLとして強調表示されるのは望ましくありません。他の言語を使用するには、構文で言語を変更するだけです。
$sql = <<<SQL
SELECT * FROM table
SQL;
まず第一に、すべての理由は主観的です。それは理由というよりむしろ好みの問題のようなものです。
個人的には、ヒアドキュメントはまったく役に立たないことがあり、たまにそれを使用します。ほとんどの場合、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';
ヘレドックが怠惰だと言えるかどうかはわかりません。何かをするためのより面倒な方法が常にあるので、人は何でもすることは怠惰であると言うことができます。
たとえば、特定の状況では、ファイルからフェッチしてテンプレート置換を実行せずに、埋め込み変数を使用してテキストを出力することができます。ヒアドキュメントを使用すると、引用符をエスケープする必要がないため、表示されるテキストは出力したテキストになります。明らかにいくつかの欠点があります。たとえば、ヒアドキュメントをインデントできず、特定の状況で、特に私が統一構文のスティックラーを使用している場合は、イライラすることがあります。