У меня есть простая функция 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- html_string выше. 
Одна вещь, о которой я мог подумать, – дублировать функцию и заставить ее возвращать строку. Однако это было бы так неэффективно, потому что оно вводит много дубликатов кода.
 <?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; } ?> 
        Вы можете использовать выходные буферизационные документы для получения вывода этой функции:
 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:
/** * 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 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 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 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); 
Связанный:
Использовать буферизацию вывода:
 <?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 камни!
Лучшим действием для получения содержимого функции 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 ();