我更喜欢在 php 标记之外编写 html,因此 eclipse 可以使用适当的语法高亮显示 html。连接方法更难编写并且不突出显示(参见下面的两个示例)。
我为篇幅道歉。这些示例非常简单,因此应该很容易阅读。
我不喜欢这样,“引号”和 $o 太多,而且没有语法高亮!:
<?php
display($something){
$o = '';
$o .= '<div>';
$o .= $something;
$o .= '</div>';
return $o;
}
// I want to be able to do this:
echo display(display('something'));
这使函数有机会完成关闭<tag>
,甚至在之后添加额外的 html。 上面的例子在功能上是我想要做的,但由于这些原因('引号'、$o's 和语法突出显示)我还没有创建这样的系统。
下面的例子是我更喜欢写html的方式,但是我不能嵌套输出,因为它不返回!
<?php
function display($something){ ?>
<div>
<?=$something?>
</div>
<?php }
// I'd like to do this, but I can't
display(display('this doesn't return anything to the first function call...'));
这就是输出缓冲的用武之地,我稍后再谈……
我所设想的:
我希望能够用来func_get_args()
完成这样的事情(注意,这将适用于 OOP 对象,只是在这里保持简单):
<?php
some_panel( title_style_1('Sample Header'),
panel_content(you_tube($vid_id)),
small_img_frame($img_src) );
您基本上可以采用任何这些输出函数并以您喜欢的任何方式嵌套它们。就像您可以将 any<div>
放入 any 中一样<p>
,反之亦然。唯一的问题是,您必须确保关闭标签......而且,在这种情况下,您可以在末尾或子项之间添加任何标记。
这就是输出缓冲的用武之地
<?php
function display($something){
ob_start(); // <---- Start buffer ?>
<div>
<?=$something?>
</div>
<?php return ob_end_clean(); // <------ Return output
}
// Now I can do this!!!
echo display(display('this should work!'));
而且,请打鼓……问题:
如果我在每个请求中重复缓冲数百甚至数千次,这会影响性能吗?我已经阅读了警告输出缓冲的帖子,原因是:
可靠性:如果在其他地方启动了缓冲区,根据我的阅读,这听起来像这些嵌套并且可能会发生冲突。
可维护性:如果一个缓冲区被启动,你必须保证它会被停止。
对于我的系统,如果在同一个函数调用中启动和停止输出缓冲,这些事情似乎没问题。<li>
这是我担心的每个开始/停止输出缓冲的潜在 1000 个项目的过度迭代。
此外,如果有人知道任何框架或更好的方法来做我想做的事情,任何建议都将不胜感激!