я использую <<<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;
?>
Ваш терминатор 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;
}
Других решений пока нет …