PHP 在 <<
发布于 2024-09-19 05:21:24 字数 226 浏览 2 评论 0 原文

我使用 PHP 的 EOF 字符串来格式化 HTML 内容,而无需转义引号等麻烦。如何使用该字符串内的函数?

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

I use PHP's EOF string to format HTML content without the hassle of having to escape quotes etc. How can I use the function inside this string?

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

栩栩如生 2024-09-26 05:22:19

据我所知,您刚刚错误地添加了heredoc
这里不需要使用丑陋的定界符语法。
只需删除它,一切都会正常:

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

As far as I can see, you just added heredoc by mistake
No need to use ugly heredoc syntax here.
Just remove it and everything will work:

<p>Hello</p>
<p><?= _("World"); ?></p>
葵雨 2024-09-26 05:22:05

据我所见 根据手册,不可能在 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 查找。

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

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

这一切都未经测试,但应该可以工作。

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

As far as I can see in the manual, it is not possible to call functions inside HEREDOC strings. A cumbersome way would be to prepare the words beforehand:

<?php

    $world = _("World");

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

a workaround idea that comes to mind is building a class with a magic getter method.

You would declare a class like this:

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

Initialize an object of the class at some point:

  $translate = new Translator();

You can then use the following syntax to do a gettext lookup inside a HEREDOC block:

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

$translate->World will automatically be translated to the gettext lookup thanks to the magic getter method.

To use this method for words with spaces or special characters (e.g. a gettext entry named Hello World!!!!!!, you will have to use the following notation:

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

This is all untested but should work.

Update: As @mario found out, it is possible to call functions from HEREDOC strings after all. I think using getters like this is a sleek solution, but using a direct function call may be easier. See the comments on how to do this.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文