不正确的缩进会破坏 php 代码吗?

ola*_*tan 3 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>
Run Code Online (Sandbox Code Playgroud)

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

当我尝试缩进 php 使其位于 body 标记前面时,它下方的 HTML 被注释掉,chrome 浏览器显示错误:

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

rjd*_*own 6

一般来说,没有。缩进 PHP 代码根本不会影响它。但是,对于heredoc,此规则有一个例外。从文档

警告

请务必注意,带有结束标识符的行不得包含除分号 (;) 之外的其他字符。这尤其意味着标识符不能缩进,并且分号前后不能有任何空格或制表符。认识到结束标识符之前的第一个字符必须是本地操作系统定义的换行符也很重要。这是 UNIX 系统上的 \n,包括 Mac OS X。结束定界符后面还必须跟一个换行符。

如果这条规则被打破并且结束标识符不是“干净的”,它不会被认为是一个结束标识符,PHP 将继续寻找一个。如果在当前文件结束之前没有找到合适的结束标识符,最后一行将导致解析错误。

简而言之,您的EOD;EOT;行必须是独立的,不能有制表符、空格或其他任何东西。

  • ++1 用于识别导致此问题的规则。如果OP只是简单地阅读了他使用的语言功能的文档...... (2认同)