修改现有PHP函数以返回字符串

时间:2012-01-04 17:06:18

标签: php function

我有一个输出HTML的简单PHP函数。

<?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 个答案:

答案 0 :(得分:8)

您可以使用output bufferingDocs来获取该函数的输出:

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 :(得分:1)

使用输出缓冲:

<?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 rock!

答案 2 :(得分:0)

获取html内容函数内容的最佳操作如下,然后它应该在您的手中:

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

在此方法中,您可以轻松地将所需的html标记和内容粘贴到代码中并轻松使用它们。

我在html标签开始之前使用了 ob_start(); ,最后我使用了 return ob_get_clean();