PHP中使用Gettext<<

时间:2010-09-12 09:21:39

标签: php gettext eof

我使用PHP的EOF字符串来格式化HTML内容,而不必担心必须转义引号等。如何使用此字符串中的函数?

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

2 个答案:

答案 0 :(得分:86)

就我在the manual中看到的而言,无法调用HEREDOC字符串中的函数。一种繁琐的方法是事先准备好这些词语:

<?php

    $world = _("World");

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

我想到的一个解决方法是使用magic getter method构建一个类。

你会声明一个这样的类:

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

在某个时刻初始化类的对象:

  $translate = new Translator();

然后,您可以使用以下语法在HEREDOC块中执行gettext查找:

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

$translate->World将自动转换为gettext查找,这要归功于魔术getter方法。

要将此方法用于包含空格或特殊字符的单词(例如名为Hello World!!!!!!的gettext条目),您必须使用以下表示法:

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

这都是未经测试但应该有效。

  

更新:正如@mario发现的那样,毕竟可以从HEREDOC字符串中调用函数。我认为使用这样的getter是一个时髦的解决方案,但使用直接函数调用可能更容易。请参阅有关如何执行此操作的注释。

答案 1 :(得分:0)

据我所知,你只是错误地添加了heredoc 这里不需要使用丑陋的heredoc语法 只需删除它,一切都会起作用:

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