Я использую (или, по крайней мере, привязываю) функцию 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;
}
Вы не должны использовать 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.
Я задал этот (похожий) вопрос на другом сайте, пытаясь выяснить, почему это происходит, и нашел виновника.
Проблема была в вызванных функциях, которые выводят эхо (или выводят на печать), а не возвращают его. Когда я переключился на возврат, код выводится соответствующим образом.