我使用 PHP 的 EOF 字符串来格式化 HTML 内容,而无需转义引号等。如何在这个字符串中使用函数?
<?php
$str = <<<EOF
<p>Hello</p>
<p><?= _("World"); ?></p>
EOF;
echo $str;
?>
问问题
203287 次
我使用 PHP 的 EOF 字符串来格式化 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();
然后,您可以使用以下语法在 HEREDOC 块内执行 gettext 查找:
$str = <<<EOF
<p>Hello</p>
<p>{$translate->World}</p>
EOF;
echo $str;
?>
$translate->World
由于神奇的 getter 方法,将自动转换为 gettext 查找。
要将此方法用于带有空格或特殊字符的单词(例如名为 的 gettext 条目Hello World!!!!!!
,您必须使用以下符号:
$translate->{"Hello World!!!!!!"}
这一切都未经测试,但应该可以工作。
更新:正如@mario 发现的那样,毕竟可以从 HEREDOC 字符串调用函数。我认为使用像这样的 getter 是一种时尚的解决方案,但使用直接函数调用可能更容易。请参阅有关如何执行此操作的评论。
4
2 回答
98
据我在手册中看到的,不可能在 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();
然后,您可以使用以下语法在 HEREDOC 块内执行 gettext 查找:
$str = <<<EOF
<p>Hello</p>
<p>{$translate->World}</p>
EOF;
echo $str;
?>
$translate->World
由于神奇的 getter 方法,将自动转换为 gettext 查找。
要将此方法用于带有空格或特殊字符的单词(例如名为 的 gettext 条目Hello World!!!!!!
,您必须使用以下符号:
$translate->{"Hello World!!!!!!"}
这一切都未经测试,但应该可以工作。
更新:正如@mario 发现的那样,毕竟可以从 HEREDOC 字符串调用函数。我认为使用像这样的 getter 是一种时尚的解决方案,但使用直接函数调用可能更容易。请参阅有关如何执行此操作的评论。
于 2010-09-12T09:26:55.930 回答
-1
据我所知,您只是错误地添加了heredoc
此处无需使用丑陋的heredoc 语法。
只需删除它,一切都会正常工作:
<p>Hello</p>
<p><?= _("World"); ?></p>
于 2010-09-12T11:12:03.933 回答