2013-01-08 118 views
1

我發現這個PHP代碼片段:什麼是和如何使用'<<< END_JAVASCRIPT'字符串?

$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」字符串以及如何和何時應該使用(?)? P.S.我試圖運行這段代碼,但在PHP中出現了一個解析錯誤('unexpected $ end')。

UPDATE: 原因我正在解析錯誤是,我縮進代碼(包括結束標識符「END_JAVASCRIPT」)。 PHP的heredoc文檔包含以下警告:

需要注意的是結束標識符的行必須包含任何其它字符,除了可能分號是很重要的()。這意味着特別是標識符可能不會縮進,並且在分號之前或之後可能沒有任何空格或製表符。認識到關閉標識符之前的第一個字符必須是由本地操作系統定義的換行符也很重要。

+1

http://php.net/manual/en/language.types.string.php –

回答

2

這是heredoc syntax。對於輸出大塊HTML非常有用,尤其是當您包含PHP變量值時,因爲它們會像使用雙引號時那樣進行解釋,但是對於heredoc,您不必轉義雙引號。

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

狠抓收盤ARBITRARY_STRING;路線,必須是由本身就是一個線不能有任何空格在其開始或分號之後。

3

這是heredoc string literal syntax<<<SOMETHING開始一個很長的多行字符串,並且SOMETHING;在它自己的行上結束字符串。

您得到語法錯誤的原因可能是因爲您縮進了END_JAVASCRIPT;部分。它必須在一條線的最開始。