Есть ли способ вернуть HTML в функцию PHP? (без построения возвращаемого значения в виде строки) - PullRequest
58 голосов
/ 09 февраля 2009

У меня есть функция PHP, которую я использую для вывода стандартного блока HTML. В настоящее время это выглядит так:

<?php function TestBlockHTML ($replStr) { ?>
    <html>
    <body><h1> <?php echo ($replStr) ?> </h1>
    </html>
<?php } ?>

Я хочу вернуть (а не повторить) HTML-код внутри функции. Есть ли способ сделать это без построения HTML (выше) в строке?

Ответы [ 7 ]

77 голосов
/ 09 февраля 2009

Вы можете использовать heredoc , который поддерживает переменную интерполяцию, что делает его довольно аккуратным:

function TestBlockHTML ($replStr) {
return <<<HTML
    <html>
    <body><h1>{$replStr}</h1>
    </body>
    </html>
HTML;
}

Обратите особое внимание на предупреждение в руководстве - закрывающая строка не должна содержать пробелов, поэтому не может иметь отступ.

64 голосов
/ 09 февраля 2009

Да, есть: вы можете захватить echo текст, используя ob_start:

<?php function TestBlockHTML ($replStr) { ob_start(); ?>
    <html>
    <body><h1> <?php echo ($replStr) ?> </h1>
    </html>
<?php
    return ob_get_clean();
} ?>
16 голосов
/ 13 ноября 2011

Это может быть схематичное решение, и я был бы признателен всем, кто указал, является ли это плохой идеей, поскольку это не стандартное использование функций. Я добился определенного успеха при получении HTML из функции PHP без построения возвращаемого значения в виде строки со следующим:

function noStrings() {
    echo ''?>
        <div>[Whatever HTML you want]</div>
    <?php;
}

Просто "вызвать" функцию:

noStrings();

И он выдаст:

<div>[Whatever HTML you want]</div>

Используя этот метод, вы также можете определять переменные PHP внутри функции и выводить их внутри HTML.

6 голосов
/ 09 февраля 2009

Создайте файл шаблона и используйте механизм шаблонов для чтения / обновления файла. Это повысит удобство сопровождения вашего кода в будущем, а также отделит отображение от логики.

Пример использования Smarty :

Файл шаблона

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head><title>{$title}</title></head>
<body>{$string}</body>
</html>

Код

function TestBlockHTML(){
  $smarty = new Smarty();
  $smarty->assign('title', 'My Title');
  $smarty->assign('string', $replStr);
  return $smarty->render('template.tpl');
}
5 голосов
/ 28 февраля 2014

Другой способ сделать это - использовать file_get_contents () и иметь шаблон HTML-страницы

СТРАНИЦА ШАБЛОНА

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head><title>$title</title></head>
<body>$content</body>
</html>

Функция PHP

function YOURFUNCTIONNAME($url){

$html_string = file_get_contents($url);
return $html_string;

}
1 голос
/ 11 июня 2018

Или вы можете просто использовать это:

<?
function TestHtml() { 
# PUT HERE YOU PHP CODE
?>
<!-- HTML HERE -->

<? } ?>

чтобы получить контент из этой функции, используйте это:

<?= file_get_contents(TestHtml()); ?>

Вот и все :)

0 голосов
/ 17 июня 2018

Если вы не хотите полагаться на сторонний инструмент, вы можете использовать эту технику:

function TestBlockHTML($replStr){
  $template = 
   '<html>
     <body>
       <h1>$str</h1>
     </body>
   </html>';
 return strtr($template, array( '$str' => $replStr));
}
...