必须EOT在线上的bebinning?

时间:2017-03-30 08:10:08

标签: php

if(...) {
    if(...) {
        echo <<<EOT
        xxxxxx
EOT;
    } 
}

if(...) {
    if(...) {
        echo <<<EOT
        xxxxx
        EOT;
    } 
}

我更喜欢后者,因为它不会破坏代码的结构。

但似乎后者会在大多数编辑中引起突出显示错误。

是否有任何标准规定我们必须写为前者?如果是这样,为什么他们会达到如此不满意的标准呢?

还有什么替代方法可以在php中编写块字符串,这不会像以前那样破坏代码结构吗?真的不满意......

3 个答案:

答案 0 :(得分:2)

正如其他人所指出的那样,heredoc语法是严格的,结束语句必须放在它自己的行上,没有空格。

使用heredoc有非常合理的理由,例如,请参阅此SO问题:What is the advantage of using Heredoc in PHP ?
如果你是这种情况,那么如果你想让你的缩进保持一致,那么将块字符串移动到外部文件可能是最好的选择。

heredoc的替代品

如果单引号或双引号字符串包含带换行符的文本,则缩进中的所有空格都会保留在输出中,但在浏览器中会被禁止。

根据您对输出的要求,您可以编写自己的包装函数,例如,如果要在浏览器输出中显示换行符:

if( true ) {
  if( true ) {

    // Single quoted
    $single = 'some
    text';
    echo $single; // some text

    // Double quoted
    $double = "some
    text";
    echo $double; // some text

    // Custom function
    function block($s) {
      return preg_replace('/\s*\n\s*/', '<br/>', $s);
    }
    echo block("some
    text"); // some<br/>text
    // In a browser this is shown as:
    // some
    // text
  }
}

最后一个使用block函数的示例会删除换行符周围的所有空格(包括换行符),并将其替换为<br/>标记。

答案 1 :(得分:1)

直接来自PHP:

  

警告请务必注意关闭的行   标识符必须不包含其他字符,分号(;)除外。   这尤其意味着标识符可能不会缩进,并且   在分号之前或之后可能没有任何空格或制表符。

PHP Manual's reference

答案 2 :(得分:1)

您可以将其移至外部文件,如:

return <<<"EOF"
  Hello $var
EOF;

然后通过include

获取
if(...) {
  if(...) {
    $var = 'World';
    print include 'file.php';
  } 
}

结果是

Hello World