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

我有一个 PHP 函数,用来输出一个标准的 HTML 代码块:

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

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

148262 次浏览

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

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

你可以使用 Herdoc,它支持变量插值,使它看起来相当整洁:

function TestBlockHTML ($replStr) {
return <<<HTML
<html>
<body><h1>{$replStr}</h1>
</body>
</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>{$string}</body>
</html>

密码

function TestBlockHTML(){
$smarty = new Smarty();
$smarty->assign('title', 'My Title');
$smarty->assign('string', $replStr);
return $smarty->render('template.tpl');
}

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

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

仅仅“调用”函数:

noStrings();

它将输出:

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

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

另一种方法是使用 File _ get _ content ()并拥有一个模板 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;


}

或者你可以用这个:

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

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 作为 string 进行回显