Модифицируйте существующую функцию PHP, чтобы она возвращала строку - PullRequest
1 голос
/ 04 января 2012

У меня есть простая функция PHP, которая выводит HTML.

<?php
function get_header() {
?>
<div id="header">
  <div class="page-width">
  <!-- And a lot more HTML after this line. -->
<?php
}
?>

Итак, когда я вызываю get_header(), функция выводит HTML.

Какой самый простой вариант настройкиэта функция для возврата HTML в виде строки?Нужно ли создавать обертку вокруг этой функции?Другими словами, я хотел бы иметь возможность сделать, например, var html_string = get_header_wrapper(), где html_string содержит весь приведенный выше HTML.

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

<?php
function get_header_wrapper() {
  var ret = <<<EOD
  <div id="header">
    <div class="page-width">
    <!-- And a lot more HTML after this line. -->
  ...
  EOD;

  return ret;
}
?>

Ответы [ 3 ]

8 голосов
/ 04 января 2012

Вы можете использовать выходную буферизацию Документы , чтобы получить вывод этой функции:

ob_start();
get_header();
$html = ob_get_clean();

Если вам это нужноболее одного раза вы можете заключить его в свою собственную функцию:

/**
 * call a function and return it's output as string.
 * 
 * @param callback $function
 * @param array $arguments (optional)
 * @param var $return (optional) the return value of the callback
 * @return string function output
 */
function ob_get_call($function, array $arguments = array(), &$return = NULL)
{
    ob_start();
    $return = call_user_func_array($function, $arguments);
    $buffer = ob_get_clean();
    return $buffer;
}

Использование:

$html = ob_get_call('get_header');

Поскольку ответ сегодня так популярен, вот еще одна функция для получениявыходные данные включают в себя:

/**
 * include a file and return it's output as string.
 * 
 * @param string $file
 * @param array $variables (optional) keys as variable names and values as variable values
 * @param var $includeReturn (optional) the return value of the include
 * @return string function output
 */
function ob_get_include($file, array $variables = array(), &$includeReturn = NULL)
{
    $includeFilename = $file;
    unset($file);
    extract($variables);
    unset($variables);
    ob_start();
    $includeReturn = include($includeFilename);
    return ob_get_clean();
}

Использование:

include.php:

<div class="greeting">
    Hello <em><?php echo htmlspecialchars($name); ?></em>!
</div>

Использование:

$variables = array(
    'name' => 'Marianne',
);
$html = ob_get_include('include.php', $vars);

Похожие:

1 голос
/ 04 января 2012

Использовать буферизацию вывода:

<?php
function get_header() {
  ob_start();
  <div id="header">
    <div class="page-width">
    <!-- And a lot more HTML after this line. -->
  ...
  $content = ob_get_contents();
  ob_end_clean();
  return $content;
}
?>

Вы можете даже выполнить некоторую обработку строки перед ее возвратом.OB качается!

0 голосов
/ 28 февраля 2015

Лучшим действием для получения содержимого функции html-content является следующее, и тогда оно должно быть у вас под рукой:

function html_content(){
ob_start();?>
    <div class="some-div" id='the_id'>html text goes here
    </div>
<?php 
return ob_get_clean();
}

В этом методе вы можете легко скопировать и вставить необходимые теги html.и содержимое ваших кодов и легко их использовать.

Я использовал ob_start (); до начала HTML-тегов и в конце я использовал return ob_get_clean ();

...