Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

Ответ 3

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

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

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

noStrings();

И он выведет:

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

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

Ответ 4

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

Пример с помощью 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

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

}