我更喜欢在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'和语法高亮),我没有创建这样的系统。
下面的例子是我喜欢如何写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) );
你基本上可以使用这些输出函数中的任何一个,并以任何你喜欢的方式嵌套它们。就像你可以把任何<div>
放在任何<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!'));
还有,请打鼓....一个问题:
如果我对每个请求重复缓存数百甚至数千次,这会影响性能吗?我读过一些关于警告输出缓冲的帖子,因为:
可靠性:如果在其他地方启动了一个缓冲区,从我读到的,听起来像这些嵌套,可能会有潜在的冲突。
可维护性:如果一个缓冲区被启动,你必须保证它将被停止。
对于我的系统,如果输出缓冲在同一个函数调用中启动和停止,这些事情似乎是OK的。我担心的是,每个启动/停止输出缓冲的单个<li>
可能会对1000个项目进行过度迭代。
另外,如果有人知道任何框架或更好的方法来做我正在尝试做的事情,任何建议将不胜感激!
如何通过…output嵌套输出?
<?php
function foo($itemName) {
?>
<div class="item">
<?php bar($itemName); ?>
</div>
<?php
}
function bar($itemName) {
?>
<h1><?= $itemName ?></h1>
<p>Hello, world!</p>
<?php
}
?>
但是要回答剩下的问题:基准测试!输出缓冲通常不是问题,但它很可能成为任何人的瓶颈。这取决于.
如果您发现自己经常做这种事情,请考虑将其分解为几个文件或使用模板系统。
输出缓冲可能是一种浪费,它甚至可以提高性能。减少I/O可以节省CPU浪费的缓冲。套接字写操作实际上包含数千条指令。只有当输出量会对内存使用产生不利影响时,它才会成为问题。如果您要缓冲许多兆字节的输出,则可能需要研究某种形式的流。
这是一个关于PHP输出缓冲的旧帖子-听起来像一个坏主意,是吗?