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

有没有办法在PHP函数中返回HTML?(不将返回值构建为字符串),php,string,templating,Php,String,Templating,我有一个PHP函数,用于输出HTML的标准块。目前看起来是这样的: <?php function TestBlockHTML ($replStr) { ?> <html> <body><h1> <?php echo ($replStr) ?> </h1> </html> <?php } ?> 我想返回(而不是回显)函数中的HTML。有没有办法不用在字符串中构建HTML(如

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

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


我想返回(而不是回显)函数中的HTML。有没有办法不用在字符串中构建HTML(如上所述)就可以做到这一点?

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


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

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

return创建一个模板文件,并使用模板引擎读取/更新该文件。这将提高代码在将来的可维护性,并将显示与逻辑分开

示例使用:

模板文件

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

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

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

<div>[Whatever HTML you want]</div>
[您需要的任何HTML]

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

另一种方法是使用模板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>

或者,您可以使用以下选项:

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

<? } ?>

要从此函数获取内容,请使用以下命令:

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


就是这样:)

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

function TestBlockHTML($replStr){
  $template = 
   '<html>
     <body>
       <h1>$str</h1>
     </body>
   </html>';
 return strtr($template, array( '$str' => $replStr));
}
函数TestBlockHTML($replStr){
$template=
'
$str
';
返回strtr($template,array('$str'=>$replStr));
}
模板文件
然后,您可以将$text作为字符串回显

,也可以根据需要缩进,但应该在标识符后面有一个换行符。如果变量未放入数组中,则可以避免使用大括号:$replStr或{$array['var]}/Mindblow你能解释一下为什么在所有其他方法都失败的情况下,这种方法可以正常工作吗?没有
echo
,只需要
?>html就可以了。正是这样,语法被突出显示,关键字被着色,就像它们是普通的html一样,而不是字符串中的内容。对于可维护性来说,这肯定是一个更好的答案,应该始终放在首位为什么当输出缓冲区运行正常时,您可以使用它吗?
Lorem ipsum dolar

@Joren,因为这正是OP不想要的。好吧,如果您想响应它,我的示例将是一种方法。@Joren是的,本质上。这是最接近我所寻找的。@Cayde 6,您认为有没有一种方法可以获得一个单独的缓冲区文件'template.php',包含php函数和html?因此,在我网站的任何地方,我只需要'require_once('template.php'),然后在需要显示html的任何地方调用echo函数。在YOURFUNCTIONNAME($url)中,$url是否需要自身?我们如何做到这一点?谢谢
<?
function TestHtml() { 
# PUT HERE YOU PHP CODE
?>
<!-- HTML HERE -->

<? } ?>
<?= file_get_contents(TestHtml()); ?>
function TestBlockHTML($replStr){
  $template = 
   '<html>
     <body>
       <h1>$str</h1>
     </body>
   </html>';
 return strtr($template, array( '$str' => $replStr));
}
<h1>{title}</h1>
<div>{username}</div>
if (($text = file_get_contents("file.html")) === false) {
    $text = "";
}

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