Странный порядок вывода HEREDOC

Я использую (или, по крайней мере, привязываю) функцию PHP 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;
}

Проблема под рукой с «{$ Heredoc (display_all_articles_in_a_html_table ())}msgstr «вызов, который выводится раньше всего, что приводит к битому 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

Итак, я нашел «грязное» исправление, хотя это не объясняет, почему двигатель работает так, как работает. (Я также тестировал на другой машине, с 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

Решение

Вы не должны использовать heredoc здесь. Или действительно пытаться визуализировать весь HTML-документ внутри функции. Вот как HTML должен отображаться с php.
Примечание: я также уверен, что вы не можете вызывать функции в выражении 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.php», например.

include_once('page.php');

И включайте его везде, где бы вы ни вызвали эту функцию splicemaster_return_full_page.

0

Другие решения

Я задал этот (похожий) вопрос на другом сайте, пытаясь выяснить, почему это происходит, и нашел виновника.

Проблема была в вызванных функциях, которые выводят эхо (или выводят на печать), а не возвращают его. Когда я переключился на возврат, код выводится соответствующим образом.

0

По вопросам рекламы [email protected]