56

初心者として、ネストされたコードが多すぎるのではなく、ヒアドキュメントを使用することをお勧めします(phpコードの予期しないT_ELSEを参照)。

しかし、ヒアドキュメントとナウドックの間に大きな違いがあるかどうかを理解することはできません。

初心者が理解するのに重要な他のものと比較したヒアドキュメントとナウドックの利点は何でしょうか(つまり、それほど小さな利点ではありませんが、私にとっては理解することが重要です)。

4

4 に答える 4

133

Nowdocsは一重引用符で囲まれた文字列であり、heredocsは二重引用符で囲まれた文字列です。nowdocはヒアドキュメントと同様に指定されますが、nowdoc内では解析は行われません。この構成は、エスケープせずにPHPコードやその他の大きなテキストブロックを埋め込むのに理想的です。

http://php.net/manual/en/language.types.string.php#language.types.string.syntax.nowdoc

言い換えると:

$foo = 'bar';

$here = <<<HERE
    I'm here, $foo !
HERE;

$now = <<<'NOW'
    I'm now, $foo !      
NOW;

$here「私はここにいる、バー!」、「私は今、$ fooです!$now」。

変数の補間は必要ないが$、文字列内のような特殊文字が必要な場合は、Nowdocsの方が使いやすいです。それで全部です。

于 2012-06-22T09:03:38.400 に答える
2

heredocs
1. heredocsテキストは、二重引用符なしで、二重引用符で囲まれた文字列のように動作します。2.ヒアドキュメント
の引用符はエスケープする必要はありませんが、エスケープコード\ n改行、 \ rキャリッジリターン、\ t水平タブ、\ v垂直タブ、\ eエスケープ、\ fフォームフィード、\バックスラッシュ、\ $ドル記号、「二重引用符」は引き続き使用できます。変数は展開されますが、文字列の場合と同様に、ヒアドキュメント内で複雑な変数を表現する場合も同様に注意する必要があります。

例 :

$myname='Tikku';
$heredoc_exmaple= <<<HEREDOC
\\n ,\\r ,\t ,\r ,\\v ,\\e ,\f ,\\ , \ ,$89 ,$ , $myname , ' , \$myname ,  \" ,\'
HEREDOC;
echo $heredoc_exmaple;

//OUTPUT \n ,\r ,   , ,\v ,\e , ,\ , \ ,$89 ,$ , Tikku , ' , $myname , \" ,\'

nowdocs
1. nowdocsテキストは、一重引用符なしで一重引用符で囲まれた文字列のように動作します。
2. nowdocsの引用符は、エスケープする必要はありません。変数はその中で展開されません。nowdocsの利点は、エスケープする必要なしにPHPコードとエスケープコードを埋め込むことです。

例 :

$myname='Tikku';
$nowdoc_exmaple= <<<'NOWDOC'
\\n ,\\r ,\t ,\r ,\\v ,\\e ,\f ,\\ , \ ,$89 ,$ , $myname  , ' , \$myname ,  \" ,\'
NOWDOC;

echo $nowdoc_exmaple;

//OUTPUT \\n ,\\r ,\t ,\r ,\\v ,\\e ,\f ,\\ , \ ,$89 ,$ , $myname , ' , \$myname , \" ,\'

構文:nowdocは、ヒアドキュメントで使用されるのと同じ<<<シーケンスで識別されますが、後続の識別子は一重引用符で囲まれます(例:<<<'NOWDOC')。ヒアドキュメント識別子のすべてのルールは、nowdoc識別子、特に終了識別子の外観に関するルールにも適用されます。

于 2017-10-13T09:42:54.080 に答える
0

Nowdocは、引用符を解釈せず、変数を受け入れないため、複雑な文字列の引用符と引用符の解除を処理したくない場合に最適です。そのため、実際のコードスニペットを手動で表示するのに適しています。

ただし、文字列コンテンツのブロックにヒアドキュメントとナウドキュメントを組み合わせて使用​​している場合は、簡単に陥りがちですが、ヒアドキュメントを使用すると、どこでもXSS(クロスサイトスクリプティング)の問題が発生する可能性があります。そのため、このアプローチは、PHPを使い始めた開発者に勧めるには十分ではありません。代わりに、これらの大きな情報ブロックには、テンプレート(任意の種類、または任意のテンプレートエンジン)を使用するようにしてください。結局のところ、PHPにhtmlは必要ありません。また、次のように、ユーザーが挿入したjavascriptは必要ありません。

$username = '<script>alert(document.cookie.toString())</script>';

$insecure_example = <<<HERE
    I really like having my site exploited, $username
HERE;

したがって、適切なテンプレートアプローチまたはテンプレートエンジンの代わりにHEREDOCSおよびNOWDOCSを使用しないでください。

言語やテクノロジーの間にインターフェースがある場合はいつでも、エンコードする必要があります。phpからsql?練る。phpからhtmlへ?エンコード。httpからphp?

于 2012-11-16T21:24:13.403 に答える
0

ヒアドキュメントは、「テキスト」、エコー「テキスト」、およびnowdocよりも1000倍高速です。

エコー=0.00011205673217773のSql1

ヒアドキュメント=9.7751617431641E-6のsql2

結果=Sql1は1046.3414634146%遅いです。

于 2020-12-27T09:20:44.660 に答える