PHP с использованием Gettext внутри <<< EOF string

Я использую строку EOF PHP для форматирования HTML-содержимого без хлопот, чтобы избежать кавычек и т. Д. Как я могу использовать функцию внутри этой строки?

<?php $str = <<<EOF <p>Hello</p> <p><?= _("World"); ?></p> EOF; echo $str; ?> 

Solutions Collecting From Web of "PHP с использованием Gettext внутри <<< EOF string"

Насколько я вижу в руководстве , невозможно вызвать функции внутри строк HEREDOC. Грубым способом было бы подготовить слова заранее:

 <?php $world = _("World"); $str = <<<EOF <p>Hello</p> <p>$world</p> EOF; echo $str; ?> 

обходной идеей, которая приходит на ум, является создание класса с магическим методом getter .

Вы бы объявили класс следующим образом:

 class Translator { public function __get($name) { return _($name); // Does the gettext lookup } } 

Инициализировать объект класса в какой-то момент:

  $translate = new Translator(); 

Затем вы можете использовать следующий синтаксис для поиска gettext внутри блока HEREDOC:

  $str = <<<EOF <p>Hello</p> <p>{$translate->World}</p> EOF; echo $str; ?> 

$translate->World будет автоматически переведен на поиск gettext благодаря методу магического геттера.

Чтобы использовать этот метод для слов с пробелами или специальными символами (например, запись gettext с именем Hello World!!!!!! , вам нужно будет использовать следующие обозначения:

  $translate->{"Hello World!!!!!!"} 

Это все непроверено, но должно работать.

Обновление . Как выяснил @mario, в любом случае можно вызвать функции из строк HEREDOC. Я думаю, что использование таких геттеров, как это, является гладким решением, но использование прямого вызова функции может быть проще. См. Комментарии о том, как это сделать.

Насколько я вижу, вы просто добавили heredoc по ошибке
Здесь нет необходимости использовать уродливый синтаксис heredoc.
Просто удалите его, и все будет работать:

 <p>Hello</p> <p><?= _("World"); ?></p>