在函数内部使用 heredoc 会更改其下方代码的语法突出显示

D. *_*ing 1 php heredoc

<<<heredoc heredoc;在函数内部(在类中)使用它,它弄乱了其下面所有代码的语法突出显示。

可以在函数外部使用它,或者在函数内的一行上使用它:

php

但是如果我在函数中使用它(而不是在一行上),它会弄乱其下面的突出显示,并且我的编辑器(在 Atom 或 Sublime Text 中相同)似乎认为它与函数和类之外的函数和类一起关闭。发生了什么?

php

<?php

class SimpleCMS {
    var $host = 'localhost';
    var $username = 'root';
    var $password = '';
    var $table = '';

    public function display_public() {

    }

    public function display_admin() {
        return <<<ADMIN_FORM 
        ADMIN_FORM;
    }

    public function write() {

    }

    public function connect() {
        mysql_connect($this->host, $this->username, $this->password) or die('Could not connect to the database. ' . mysql_error());
        mysql_select_db($this->table) or die('Could not select database. ' . mysql_error())

        // build the database
        return $this->buildDB();
    }

    private function buildDB() {
        $sql = <<<MySQL_QUERY CREATE TABLE IF NOT EXISTS testDB (title VARCHAR(150), bodyText TEXT, created VARCHAR(100)) MySQL_QUERY;

        return mysql_query($sql);
    }
}

<<<ADMIN_FORM

ADMIN_FORM;
?>
Run Code Online (Sandbox Code Playgroud)

Dai*_*Dai 5

你的heredoc终止符需要位于最左边的列中,即没有缩进。这在 PHP 的网站上有记录:http://php.net/manual/en/language.types.string.php#language.types.string.syntax.heredoc

结束标识符必须从该行的第一列开始。

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

更改您当前的代码:

    public function display_admin() {
        return <<<ADMIN_FORM
        ADMIN_FORM;
    }
Run Code Online (Sandbox Code Playgroud)

对此:

    public function display_admin() {
        return <<<ADMIN_FORM
ADMIN_FORM;
    }
Run Code Online (Sandbox Code Playgroud)