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

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

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

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

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

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

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

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

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

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

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

    Просто «вызов» функции:

     noStrings(); 

    И он будет выводить:

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

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

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

    Пример использования 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'); } 

    Другой способ сделать это – использовать 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; }