Я использую строку EOF PHP для форматирования HTML-содержимого без хлопот, чтобы избежать кавычек и т. Д. Как я могу использовать функцию внутри этой строки?
<?php $str = <<<EOF <p>Hello</p> <p><?= _("World"); ?></p> EOF; echo $str; ?>
Насколько я вижу в руководстве , невозможно вызвать функции внутри строк 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>