奇怪的HEREDOC输出顺序

时间:2014-10-02 16:51:36

标签: php output heredoc

我正在使用(或至少绑定)PHP HEREDOC功能作为模板引擎。我已经实现了外部调用者字符串,可以直接处理HEREDOC中的外部函数,并且成功运行。

我现在面临的问题是,无论特定HEREDOC内的其他功能和/或代码如何,某些功能的顺序似乎优先并先执行。

如何解决这个问题?

请注意我是PHP初学者。我已完成作业,但无法找到解决方案。谢谢。

FUNCTION PROCESOR:

function heredoc($input)
    {
    return $input;
    }
    $heredoc = "heredoc";

HEREDOC模板:

function splicemaster_return_full_page()
    {
    global $heredoc;
    $title ="This is document title";
    echo <<<HEREDOC
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
{$heredoc(splice_html_title($title))}
</head>
<body>
{$heredoc(splicemaster_return_message())}
{$heredoc(splice_quick_add_article_form())}
{$heredoc(display_all_articles_in_a_html_table())}
</body>
</html>
HEREDOC;
    }

手头的问题是&#34; {$ heredoc(display_all_articles_in_a_html_table())} &#34;调用,在其他所有内容之前输出,导致HTML损坏。

任何帮助表示感谢,我现在已经敲了很长时间。

更新:

使用评论中发布的内容我试图做其他事情,但这很难看,我会在以后编辑这个问题。

function testout()
    {
    $title = "This is document title";

echo "<!DOCTYPE html>";
echo '<html lang="en">';
echo     "<head>";
echo       '<meta charset="utf-8">';
echo         "<title>". $title . "</title>";
echo     "</head>";
echo     "<body>";
echo splicemaster_return_message();
echo splice_quick_add_article_form();
echo display_all_articles_in_a_html_table();
echo     "</body>";
echo "</html>";

    }

(看起来如何并不重要 - 我有一个HTML处理器功能。)

更新2

好的,所以我找到了#34;脏&#34;修复,这并没有解释为什么引擎会像它一样工作。 (我也在另一台机器上测试,使用diff.php):

function splicemaster_return_full_page()
    {
    global $heredoc;
    $title ="This is document title";

    echo <<<HEREDOC
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
{$heredoc(splice_html_title($title))}
</head>
<body>
{$heredoc(splicemaster_return_message())}
{$heredoc(splice_quick_add_article_form())}
HEREDOC;
    echo <<<HEREDOC
{$heredoc(display_all_articles_in_a_html_table())}
</body>
</html>
HEREDOC;
    }

2 个答案:

答案 0 :(得分:0)

你不应该在这里使用heredoc。或者真的要尝试在函数中呈现整个html文档。这就是用PHP呈现html的方式。 注意:我也非常确定您无法在heredoc语句中调用函数。

<?php $title = "This is document title"; ?>
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <?php echo splice_html_title($title); ?>
    </head>
    <body>
        <?php
            echo splicemaster_return_message()
               . splice_quick_add_article_form()
               . display_all_articles_in_a_html_table();
        ?>
    </body>
</html>

您可以看到它有多清洁,这使得在需要时更容易编辑。你只需把它放在一个文件&page; Pagep&#39;例如。

include_once('page.php');

并将其包含在您调用该函数的位置splicemaster_return_full_page。

答案 1 :(得分:0)

我在其他网站上问这个(类似的)问题,同时寻找为什么会这样,并找到了罪魁祸首。

问题在于回调(或打印)输出的被调用函数,而不是返回它。当我切换回来时,代码输出正确。