Измените существующую PHP-функцию для возврата строки

У меня есть простая функция 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; } ?> 

Solutions Collecting From Web of "Измените существующую PHP-функцию для возврата строки"

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

 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-кода вместо кода в виде строки
  • Ответ на include () / require () с «побочными эффектами» – плохая практика?

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

 <?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 ();