我正在使用(或至少綁定到)PHP HEREDOC函數作爲模板引擎。我已經實現了可以直接處理HEREDOC中的外部函數的外部調用者字符串,並且可以成功運行。奇怪的HEREDOC輸出順序
我現在面臨的問題是,無論特定HEREDOC中的其他功能和/或代碼如何,某些功能的順序似乎優先並首先執行。
如何解決這個問題?
(請注意,我是一個PHP初學者我已經做了功課,但找不到感謝解答。。。)
功能。處理器:
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;
}
眼下的問題是「{$定界符(display_all_articles_in_a_html_table())}「調用,它會在其他所有內容之前輸出,從而導致HTML損壞。
任何幫助表示讚賞,我已經用了很長一段時間了。
UPDATE:
使用的東西張貼在評論我試圖去做別的事情,但是這是醜陋的地獄,我會在以後的日子編輯這個問題。
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
好了,我發現「髒」的修復,壽,不解釋發動機爲何如此運作。 (我也在另一臺機器上測試,用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;
}
我建議不要使用HEREDOC模板化整個頁面,要誠實..使用OB和加載模板...說實話,爲什麼不考慮使用框架來編程,因爲所有這些問題都已經解決了。 – 2014-10-02 17:03:52
謝謝你的回覆。什麼是「OB」?除此之外,框架不是我的東西,至少不是這個項目。 (是的,你可以在HEREDOC中調用函數,你只需要將函數重命名爲一個字符串。) – mrmut 2014-10-02 17:15:46