是否可以在heredoc模板中使用函数而不会破坏它? Somethig喜欢这样:
<<<HTML
<div> showcaptcha(); </div>
HTML;
具体来说,我想在不使用变量的情况下在这一个中需要另一个模板。 还是有另一个更简单的解决方案,不使用heredoc? Thx in advanced。
例如我正在使用名为的类。
class requires {
public function __construct(){
$this->MYSQL();
$this->FUNC();
}
public function MAIN_MENU() {
require_once ('main-menu.tpl');
}
}
那我在index.php做什么
require_once ('requires.php');
$req = new requires();
echo <<<HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
//bla bla
</head>
<nav><ul class="fancynav">
{$req->HEAD_SCRIPTS()}
</ul></nav>
HTML;
主要-menu.tpl
<li><a href="">Item</a></li>
<li><a href="">Item</a></li>
<li><a href="">Item</a></li>
<li><a href="">Item</a></li>
<li><a href="">Item</a></li>
结果我有一个没有php错误的空字段
<nav><ul class="fancynav">
</ul></nav>
WTF?
答案 0 :(得分:5)
是的,您可以使用“encapsed var”技巧:
function hello() {
global $result;
$result = 'hi there!';
return 'result';
}
echo <<<EOF
text ${hello()} text
EOF;
从技术上讲,这是有效的,但最好避免在生产中使用这样的黑客。临时变量将更加清晰。
答案 1 :(得分:1)
由于您无法直接调用HEREDOC
内的函数,您可以将函数名称放在变量中,并在HEREDOC
字符串中使用该变量:
$showcaptcha= 'showcaptcha';
echo
<<<HTML
<br/> dawg {$showcaptcha()} dawg
HTML;
所以你可以保留当前已编码的功能:
function showcaptcha()
{
return "Gotta captcha mall";
}
你也可以使用:
$showcaptcha = function()
{
return "Gotta captcha mall";
}
echo
<<<HTML
<br/> dawg {$showcaptcha()} dawg
HTML;
如果调用函数定义在与echo相同的级别(否则,您将拥有全局变量$showcaptcha
)。
如果你有几个函数,你可以在heredoc之前进行循环:
function dawg()
{
return "I'm loyal";
}
function cat()
{
return "I'm cute";
}
function fish()
{
return "I'm small";
}
function elephant()
{
return "I'm big";
}
$functionsToCall = array('elephant', 'fish', 'cat', 'dawg');
foreach ($functionsToCall as $functionToCall)
$$functionToCall = $functionToCall;
echo
<<<HTML
<br/> Dawg: {$dawg()}
<br/> Cat: {$cat()}
<br/> Fish: {$fish()}
<br/> Elephant: {$elephant()}
HTML;
这比使用全局变量
更难看答案 2 :(得分:0)
不,不可能在heredoc字符串中使用函数。