有什么办法可以在PHP函数中返回HTML吗? (不用以stringforms返回值)

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

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

我想返回(而不是回显)函数内的HTML。 有没有办法做到这一点,而不是build立一个string的HTML(上)?

你可以使用一个支持variables插值的heredoc ,使它看起来相当整洁:

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

密切注意手册中的警告 – 结束行不能包含任何空格,所以不能缩进。

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

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

这可能是一个粗略的解决scheme,我很感谢任何人指出这是否是一个坏主意,因为它不是一个标准的function使用。 我已经成功地从一个PHP函数中获取HTML,而不用像下面的string那样构build返回值:

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

只是“打电话”的function:

 noStrings(); 

它会输出:

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

使用这种方法,您也可以在函数中定义PHPvariables,并在HTML中将其回显出来。

创build一个模板文件并使用模板引擎来读取/更新文件。 它将在未来增加您的代码的可维护性,以及将显示与逻辑分开。

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

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