2015-08-31 37 views
0
for($j = 0; $j < $rows; ++$j) 
{ 
    $result->data_seek($j); 
    $row = $result->fetch_array(MYSQLI_NUM); 
echo <<<_END 
    <pre> 
    Author: $row[0] 
    Title: $row[1] 
    Type: $row[2] 
    Year: $row[3] 
    ISBN: $row[4] 
    </pre> 
_END; 
} 

我在使用echo獲取文本塊時遇到了兩件事情,而且我有點難以想出一個解釋。PHP回聲阻止行爲

  1. echo塊的任何縮進都會導致網頁崩潰。

  2. 如果我改變fetch_array型要麼MYSQLI_ASSOC,或MYSQLI_BOTH,聯想呼叫如$row['author']導致頁面崩潰。而在訪問$row時使用單線電話撥打echo工作正常。

+3

壓痕僅涉及閉合[定界符](http://php.net/manual/en/language.types.string.php#language.types.string.syntax.heredoc)標記'_END;'。在雙引號/ heredoc上下文中的字符串插值要麼需要字面的「$ row [key]」或[complex'「$ {row ['key']}」'syntax](http://php.net/manual/ en/language.types.string.php#language.types.string.parsing.complex)用於帶引號的鍵。 – mario

回答

4
  1. PHP heredoc的結束標識符不應該縮進。這是手冊中的警告段落。 (;)

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

  • 內部定界符,數組鍵或者不應該被引用,或引用內部${}符號。

    $array[key] // works (the only place you do not quote string keys in PHP) 
    ${array["key"]} // works 
    $array["key"] // doesn't work