【问题标题】:Using heredoc inside a function changes syntax highlighting of code below it在函数中使用 heredoc 会更改其下方代码的语法突出显示
【发布时间】:2019-04-12 12:58:02
【问题描述】:

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

在函数之外使用它很好 - 或者在函数内的单行上使用它:

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

<?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;
?>

【问题讨论】:

  • 代码图像不被广泛接受;请发布实际代码本身。
  • 我发布图片以在我的编辑器中显示语法高亮显示..
  • 两者都更好,因为如果我们必须修复某些东西,我们就不必重新输入所有内容或查看是否有错误。
  • 错误报告在这里会有所帮助;是一个解析错误。

标签: php heredoc


【解决方案1】:

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

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

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

更改您当前的代码:

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

到这里:

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

【讨论】:

  • 酷 - 我认为这是编辑器中的一些限制。谢谢你的信息!
  • 注意:这在 7.3 wiki.php.net/rfc/flexible_heredoc_nowdoc_syntaxes 中有所改变
  • @PaulCrovella - 我说是时候了!!
  • 天哪,这太丑了 :'( 感谢您的快速而有帮助的回答!
猜你喜欢
  • 2013-04-16
  • 2010-12-12
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-19
相关资源
最近更新 更多