Подтвердить что ты не робот

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

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

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

Ответ 1

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

<?php

    $world = _("World");

    $str = <<<EOF
    <p>Hello</p>
    <p>$world</p>
EOF;
    echo $str;
?>

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

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

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. Я думаю, что использование таких геттеров, как это, является гладким решением, но использование прямого вызова функции может быть проще. См. Комментарии о том, как это сделать.

Ответ 2

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

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