可以不正确的缩进打破PHP代码?

时间:2014-11-22 18:06:58

标签: php

我正在从用户手册学习php。现在我正在查看以下代码:

<!doctype html>
<html>
    <head>
        <meta charset="utf-8">
        <title>Untitled Document</title>
    </head>

    <body>
<?php
$str = <<<EOD
Example of string
spanning multiple lines
using heredoc syntax.
EOD;

/* More complex example, with variables. */
class foo
{
    var $foo;
    var $bar;

    function foo()
    {
        $this->foo = 'Foo';
        $this->bar = array('Bar1', 'Bar2', 'Bar3');
    }
}

$foo = new foo();
$name = 'MyName';

echo <<<EOT
My name is "$name". I am printing some $foo->foo.
Now, I am printing some {$foo->bar[1]}.
This should print a capital 'A': \x41
EOT;
?>
    </body>
</html>

此代码按预期运行并输出:我的名字是&#34; MyName&#34;。我正在打印一些Foo。现在,我正在打印一些Bar2。这应该打印一个大写&#39; A&#39;:A

当我尝试缩进php以使其位于body标签前面时,其下方的HTML会被注释掉chrome broswer显示错误:

解析错误:语法错误,第39行的C:\ xampp \ htdocs \ xampp \ phpnotes \ index.php中的文件意外结束

2 个答案:

答案 0 :(得分:4)

一般来说,没有。缩进PHP代码根本不会影响它。但是,对于heredoc这个规则有一个例外。 From the docs

  

警告

     

注意具有结束标识符的行非常重要   必须不包含其他字符,分号(;)除外。这意味着   特别是标识符可能没有缩进,也可能没有   分号前后的任何空格或制表符。它也是   重要的是要意识到结束前的第一个角色   identifier必须是本地操作系统定义的换行符。   这是在UNIX系统上的\ n,包括Mac OS X.结束分隔符   还必须跟一个换行符。

     

如果此规则被破坏且结束标识符不是&#34;清理&#34;,则它   不会被视为结束标识符,PHP将继续   寻找一个。如果之前未找到正确的结算标识符   当前文件的结尾,最后会产生一个解析错误   线。

简而言之,您的EOD;EOT;行必须独立,没有标签,空格或其他任何内容。

答案 1 :(得分:0)

rjdown's answer是正确的

您可能需要考虑的是尽量减少PHP和HTML的混合。通常,这是通过一种称为“模板”的方法完成的,其中您有两个单独的文件 - 一个几乎完全是HTML,偶尔使用PHP语句来回显函数或变量值返回的字符串。另一个文件是纯PHP,用于生成将显示的值。通常,模板文件使用.phtml扩展名,后备脚本使用.php

这是一个Hello World示例:

这是“viewmodel”,viewmodel.php

<?php

class ViewModel {
    public function sayHello($name = null) {
      if (is_null($name))
      {
          $name = 'World';
      }

      return sprintf('Hello %s', $name);
    }
}

这是“视图”,view.phtml

<?php
   require_once('viewmodel.php');
   $model = new ViewModel();
?>

<!doctype html>
<html>
    <head>
        <meta charset="utf-8">
        <title>Untitled Document</title>
    </head>

    <body>
      <?php echo $model->sayHello(); ?>
    </body>
</html>

从那里你可以在浏览器中加载view.phtml以获得输出。

这种方法并不是PHP独有的,在几乎任何系统和大多数边界使用模板是很常见的,其中一种语言的输出必须用另一种语言格式化。