Использование 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

Решение

Ваш терминатор heredoc должен находиться в крайнем левом столбце, то есть без отступа. Это задокументировано на сайте PHP: http://php.net/manual/en/language.types.string.php#language.types.string.syntax.heredoc

Закрывающий идентификатор должен начинаться в первом столбце строки.

Очень важно отметить, что строка с закрывающим идентификатором не должна содержать других символов, кроме точки с запятой (;). Особенно это означает, что идентификатор не может иметь отступ, и не должно быть пробелов или табуляции до или после точки с запятой. Также важно понимать, что первый символ перед закрывающим идентификатором должен быть символом новой строки, как это определено локальной операционной системой. Это \ n в системах UNIX, включая macOS. После закрывающего разделителя также должен стоять символ новой строки.

Измените свой текущий код:

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

К этому:

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

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector