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;
?>
頭に浮かぶ回避策のアイデアは、 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ルックアップに変換されます。
スペースまたは特殊文字(たとえば、Hello World!!!!!!
という名前のgettextエントリ)でこのメソッドを使用するには、次の表記法を使用する必要があります。
$translate->{"Hello World!!!!!!"}
これはすべてテストされていませんが、動作するはずです。
Update:@marioが見つけたように、結局HEREDOC文字列から関数を呼び出すことが可能です。このようなゲッターを使用するのは洗練されたソリューションだと思いますが、直接関数呼び出しを使用する方が簡単かもしれません。これを行う方法に関するコメントを参照してください。
私が見る限り、あなたは誤ってヒアドキュメントを追加したばかりです
ここではいヒアドキュメント構文を使用する必要はありません。
削除するだけですべてが機能します。
<p>Hello</p>
<p><?= _("World"); ?></p>