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

时间:2018-11-08 23:10:07

标签: 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;
?>

1 个答案:

答案 0 :(得分:3)

您的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;
    }

对此:

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