我有一个 PHP 函数,用来输出一个标准的 HTML 代码块:
<?php function TestBlockHTML ($replStr) { ?> <html> <body><h1> <?php echo ($replStr) ?> </h1> </html> <?php } ?>
我想返回(而不是回显)函数内部的 HTML。有没有办法不用在字符串中构建 HTML (以上)就可以做到这一点?
是的,有: 您可以使用 ob_start捕获 echoed 文本:
ob_start
echo
<?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>
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 进行回显