我正在使用(或至少绑定)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;
}
答案 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)
我在其他网站上问这个(类似的)问题,同时寻找为什么会这样,并找到了罪魁祸首。
问题在于回调(或打印)输出的被调用函数,而不是返回它。当我切换回来时,代码输出正确。