我有一个生成HTML代码的php函数,如下所示
function j_uf_SomeFunction($some_var) {
?><div class="db_photo">
<img alt="<?php echo some_php_function ?>" src="<?php echo $some_var; ?>" />
</div><?php
}
当然,它更先进并添加各种用户选项。
在大多数情况下,我将此函数设置为内联,而不是将其附加到字符串。但是,我第一次出现(可能不是最后一次)我需要将呈现的HTML存储在一个字符串中,而不是将它直接发送到解析器来构建页面。
我需要关闭该功能并告诉它采取生成的html并将其存储在一个字符串中,而不是仅在某些情况下将其发送到页面。
答案 0 :(得分:5)
function j_uf_SomeFunction($some_var) {
ob_start();
?><div class="db_photo">
<img alt="<?php echo some_php_function ?>" src="<?php echo $some_var; ?>" />
</div><?php
return ob_get_clean();//suggestion by GWW
}
ob_start()正在启动缓冲区接收 ob_get_clean()清除当前缓冲区并返回其值。
有关http://php.net/manual/en/function.ob-start.php
的更多信息ob * output buffering
答案 1 :(得分:1)
听起来输出缓冲区是解决问题的唯一方法。
您使用如下输出缓冲区:
ob_start();
j_uf_SomeFunction($someVar);
$buffer = ob_get_contents();
ob_end_clean();
$ buffer变量现在包含函数打印的任何内容。
始终使用ob_end_clean或ob_end_flush关闭输出缓冲区非常重要。您可以在此处阅读更多内容:http://php.net/manual/en/book.outcontrol.php
此致 克里斯
答案 2 :(得分:1)
我没有模板系统来解析这个函数值...它不是你的标准函数调用。
确定你做了......它的jsut包含在函数中: - )
使用翻译:
function j_uf_SomeFunction($some_var) {
$html = "<div class="db_photo"><img alt="%some_function_result%" src="%some_var%" /></div>";
$tokens = array(
'%some_var%' => $some_var,
'%some_function_call_result%' => some_function_call()
);
return strtr($html, $tokens); // or echo
}
使用字符串操作:
function j_uf_SomeFunction($some_var) {
$html = '<div class="db_photo"><img alt="%s" src="%s" /></div>';
return sprintf($html, some_function_call(), $some_var); //or echo
}
如果some_function_call
实际上直接用自己的echo输出html,那么jsut使用缓冲区:
function j_uf_SomeFunction($some_var) {
ob_start();
some_function_call();
$somefunc = ob_get_clean();
$html = '<div class="db_photo"><img alt="%s" src="%s" /></div>';
return sprintf($html, $somefunc, $some_var); //or echo
}