是否可以在heredoc中使用php函数?

时间:2014-09-27 19:43:59

标签: php heredoc

是否可以在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?

3 个答案:

答案 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字符串中使用函数。