1

私はphpのこのコードスニペットを見つけました:

$sJavascript = <<<END_JAVASCRIPT

var callback = arguments[arguments.length-1], 
nIntervalId; 

function checkDone() {
  if( window.MY_STUFF_DONE ) {
    window.clearInterval(nIntervalId); // stop polling
    callback("done"); // return "done" to PHP code
  }
}

nIntervalId = window.setInterval( checkDone, 50 ); // start polling
END_JAVASCRIPT;

$sResult = $session->execute_async(array(
  'script' => $sJavascript,
  'args' => array(),
 ));

その'END_JAVASCRIPT'文字列(?)とは何ですか?いつどのように使用する必要がありますか?PSこのスニペットを実行しようとしましたが、PHPで解析エラーが発生しました(「予期しない$ end」)。

更新: 解析エラーが発生した理由は、コードをインデントしたためです(終了識別子'END_JAVASCRIPT'を含む)。PHPヒアドキュメントのドキュメントには、次の警告が含まれています。

終了識別子のある行には、セミコロン(;)を除いて、他の文字を含めてはならないことに注意することが非常に重要です。これは特に、識別子がインデントされていない可能性があり、セミコロンの前後にスペースやタブがない可能性があることを意味します。終了識別子の前の最初の文字は、ローカルオペレーティングシステムで定義されている改行でなければならないことを理解することも重要です。


これはヒアドキュメント文字列リテラル構文です。<<<SOMETHING長い複数行の文字列を開始し、SOMETHING;それ自体の行で文字列を終了します。

構文エラーが発生した理由は、おそらくEND_JAVASCRIPT;パーツをインデントしたためです。それは行の最初にある必要があります。

4

2 に答える 2

3

ヒアドキュメント文字列リテラル構文です。<<<SOMETHING長い複数行の文字列を開始し、SOMETHING;それ自体の行で文字列を終了します。

構文エラーが発生した理由は、おそらくEND_JAVASCRIPT;部分をインデントしたためです。行の先頭にある必要があります。

于 2013-01-08T04:37:00.523 に答える
2

ヒアドキュメント構文です。HTMLの大きなチャンクを出力する場合、特にPHP変数値を含める場合は、二重引用符を使用する場合と同じように解釈されるため、非常に便利ですが、ヒアドキュメントでは二重引用符をエスケープする必要はありません。

$str = "foo";
echo <<< ARBITRARY_STRING
    <span class="blah">This is the $str var</span>
ARBITRARY_STRING;

クロージングラインに細心の注意を払ってARBITRARY_STRING;ください。inはそれ自体でライン上にある必要があり、開始時またはセミコロンの後に空白を含めることはできません。

于 2013-01-08T04:37:13.827 に答える