是什么以及如何使用'<<

时间:2013-01-08 04:35:01

标签: php

我发现这个代码片段为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'字符串(?)以及应该如何以及何时使用? 附:我试图运行这个片段,但我在PHP中得到一个解析错误('意外的$ end')。

更新 我得到解析错误的原因是我缩进了代码(包括结束标识符'END_JAVASCRIPT')。 PHP heredoc文档包含以下警告:

  

非常重要的是要注意,带有结束标识符的行必须不包含其他字符,但可能分号(;)除外。这尤其意味着标识符可能没有缩进,并且在分号之前或之后可能没有任何空格或制表符。同样重要的是要认识到结束标识符之前的第一个字符必须是本地操作系统定义的换行符。

2 个答案:

答案 0 :(得分:3)

这是heredoc string literal syntax<<<SOMETHING启动一个长的多行字符串,SOMETHING;在其自己的行上结束字符串。

您遇到语法错误的原因可能是因为您缩进了END_JAVASCRIPT;部分。它必须处于一条线的最开始。

答案 1 :(得分:2)

这是heredoc syntax。对于输出大块HTML非常有用,特别是当你包含PHP变量值时,因为它们在使用双引号时会被解释,但是对于heredoc,你不必转义双引号。

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

密切注意结束ARBITRARY_STRING;行,必须单独在一行上,并且在开头或分号后不能有任何空格。