Aussi loin que je peux voir dans le manuel, il n'est pas possible d'appeler des fonctions à l'intérieur de HEREDOC cordes. Un lourd moyen serait de préparer les mots à l'avance:
<?php
$world = _("World");
$str = <<<EOF
<p>Hello</p>
<p>$world</p>
EOF;
echo $str;
?>
une solution de contournement idée qui vient à l'esprit est la construction d'une classe avec une magie de la méthode de lecture.
Vous pouvez déclarer une classe comme ceci:
class Translator
{
public function __get($name) {
return _($name); // Does the gettext lookup
}
}
Initialiser un objet de la classe à un certain point:
$translate = new Translator();
Vous pouvez ensuite utiliser la syntaxe suivante pour faire un gettext de recherche à l'intérieur d'un HEREDOC bloc:
$str = <<<EOF
<p>Hello</p>
<p>{$translate->World}</p>
EOF;
echo $str;
?>
$translate->World
sera automatiquement traduit de l'gettext de recherche grâce à la magie de la méthode de lecture.
Pour utiliser cette méthode pour les mots par des espaces ou des caractères spéciaux (par exemple, un gettext entrée nommée Hello World!!!!!!
, vous devrez utiliser la notation suivante:
$translate->{"Hello World!!!!!!"}
C'est tout non testé mais devrait fonctionner.
Mise à jour: Comme @mario trouvé, il est possible d'appeler des fonctions de HEREDOC chaînes après tout. Je pense à l'aide de méthodes comme c'est une solution élégante, mais l'aide directe d'un appel de fonction peut être plus facile. Voir les commentaires sur la façon de le faire.