我使用PHP的EOF字符串来格式化HTML内容,而没有必须逃避引号等麻烦。我如何使用该字符串中的函数?PHP内使用Gettext <<< EOF字符串
<?php
$str = <<<EOF
<p>Hello</p>
<p><?= _("World"); ?></p>
EOF;
echo $str;
?>
我使用PHP的EOF字符串来格式化HTML内容,而没有必须逃避引号等麻烦。我如何使用该字符串中的函数?PHP内使用Gettext <<< EOF字符串
<?php
$str = <<<EOF
<p>Hello</p>
<p><?= _("World"); ?></p>
EOF;
echo $str;
?>
至于我可以看到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();
然后可以使用下面的语法里面做一个一个的gettext查找HEREDOC块:
$str = <<<EOF
<p>Hello</p>
<p>{$translate->World}</p>
EOF;
echo $str;
?>
$translate->World
将自动被tra由于使用了神奇的getter方法,所以转换为gettext查找。
要使用此方法用空格或特殊字符的话(例如名为Hello World!!!!!!
一个gettext的入口,你将不得不使用下面的符号:
$translate->{"Hello World!!!!!!"}
这是所有未经测试,但应该工作
更新:作为@mario发现,毕竟有可能从HEREDOC字符串中调用函数,我认为使用这样的getter是一个圆滑的解决方案,但使用直接函数调用可能更容易。如何 做这个。
据我所看到的,你只是被错误
没有必要在这里使用难看定界符添加定界符。
只是将其删除,一切都将工作:
<p>Hello</p>
<p><?= _("World"); ?></p>
我不认为“Hello World”是OP实际生产代码的摘录。 – 2010-09-12 13:24:39
@皮卡它没关系。无论大小如何,Heredoc仍然无用 – 2010-09-12 13:29:11
对我而言,有很多情况下使用Heredoc是使用某种模板引擎的一个很好的选择。在我看来,唯一的一大缺点就是结束标记不能缩进,这往往会导致缩进的代码类别 – 2010-09-12 13:31:47
@FFish欢迎您。它没有经过测试,所以我不能给你一个完全的保证,但据我所知,这将起作用。查看我的最新更新(关于空格和特殊字符),了解如何处理更复杂的gettext标识符 – 2010-09-12 09:37:49
哇,非常棘手/计划使用getter。 – mario 2010-09-12 09:46:04
原来你可以使用函数调用。用'$ _ =“_”;'和'{$ _('text')}'。但getter语法是+1。 – mario 2010-09-12 09:53:22