我使用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