有没有办法在PHP函数中返回HTML? (不将返回值构建为字符串)

时间:2009-02-09 14:52:42

标签: php string templating

我有一个PHP函数,我用它来输出标准的HTML块。它目前看起来像这样:

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

我想在函数内部返回(而不是回显)HTML。有没有办法在不在字符串中构建HTML(上面)的情况下执行此操作?

8 个答案:

答案 0 :(得分:77)

您可以使用支持变量插值的heredoc,使其看起来相当整洁:

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

请密切注意手册中的警告 - 结束行不得包含任何空格,因此不能缩进。

答案 1 :(得分:64)

是的,有:您可以使用ob_start捕获echo ed文本:

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

答案 2 :(得分:16)

这可能是一个粗略的解决方案,我很感激有人指出这是否是一个坏主意,因为它不是标准的功能使用。我已经成功地从PHP函数中获取HTML而没有将返回值构建为具有以下内容的字符串:

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

正好'调用'函数:

noStrings();

它会输出:

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

使用此方法,您还可以在函数中定义PHP变量,并在HTML中回显它们。

答案 3 :(得分:6)

创建模板文件并使用模板引擎读取/更新文件。它将在未来增加代码的可维护性,以及单独显示逻辑。

使用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');
}

答案 4 :(得分: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;

}

答案 5 :(得分:1)

或者你可以使用它:

<?
function TestHtml() { 
# PUT HERE YOU PHP CODE
?>
<!-- HTML HERE -->

<? } ?>

从此函数获取内容,请使用:

<?= file_get_contents(TestHtml()); ?>

就是这样:)

答案 6 :(得分:0)

如果您不想依赖第三方工具,可以使用此技术:

function TestBlockHTML($replStr){
  $template = 
   '<html>
     <body>
       <h1>$str</h1>
     </body>
   </html>';
 return strtr($template, array( '$str' => $replStr));
}

答案 7 :(得分:0)

模板文件

<h1>{title}</h1>
<div>{username}</div>

PHP

if (($text = file_get_contents("file.html")) === false) {
    $text = "";
}

$text = str_replace("{title}", "Title Here", $text);
$text = str_replace("{username}", "Username Here", $text);

然后您可以将$ text作为字符串回显