2013-02-28 25 views
1

我更喜欢在php标签之外编写html,因此eclipse可以用正确的语法高亮显示html。连接方法很难编写,并且不会突出显示(请参阅下面的两个示例)。PHP/HTML输出:echo vs return,输出缓冲和语法高亮挑战

我对这段长度表示歉意。这些例子非常简单,所以它应该是一个简单的阅读。

我不喜欢这样,太多的“报价”和$ 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)); 

你基本上可以接受任何这些输出功能并以任何你喜欢的方式嵌套它们。就像你可以把任何<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!')); 

而且,鼓声请....问题:

如果我反复缓冲潜在的数百甚至数千每个请求的时间,这是一个性能打击?我读过警惕输出缓冲由于帖子:

可靠性:如果其他地方的缓冲区开始,从我读,这听起来像这些窝,并有可能发生冲突。

可维护性:如果启动了缓冲区,则必须保证它会停止。

对于我的系统,如果输出缓冲启动,并在同一个函数调用停止,这些事情似乎是确定。这是对潜在的1000个项目的过度迭代,每个开始/停止输出缓冲对于我担心的单个<li>。另外,如果有人知道任何框架或更好的方法来做我想做的事情,任何建议,将不胜感激!

+0

对不起,我真的不能回答。但是如果你做这样的事情,你有没有想过使用聪明或小枝?我爱你在那里的力量。如果你愿意,你仍然可以“观看”驱动。 – 2013-02-28 01:26:47

+0

我不熟悉这些表格。我最初的印象是,他们没有必要,或者没有太多帮助。我会研究这些,但是,谢谢! – 2013-02-28 01:31:24

+2

我会建议树枝,但那只是一个意见。你可以在那里。并在任何部分生成和注入代码。你也可以有“块”的内容,你准备添加填充等我真的很喜欢它。 – 2013-02-28 01:34:01

回答

0

如何通过...输出嵌套输出?

<?php 
function foo($itemName) { 
?> 
    <div class="item"> 
     <?php bar($itemName); ?> 
    </div> 
<?php 
} 

function bar($itemName) { 
?> 
    <h1><?= $itemName ?></h1> 

    <p>Hello, world!</p> 
<?php 
} 
?> 

但回答问题的其余部分:基准它!输出缓冲通常不是问题,但它可能是任何人的瓶颈。这取决于。

如果您发现自己在做这类事情很多,可以考虑将其分解为多个文件或使用模板系统。 或不是PHP。

+0

随着输出复杂度的增加,我需要能够通过foo()将一堆参数传递给任意数量的子输出函数。这将是棘手的,我期望能够从顶层(与foo()相同的范围)'配置'这个输出...如果这是有道理的。 : - \ – 2013-02-28 01:30:01

+0

@MikeLewis:通过一个阵列,也许? (PHP的数组也是copy-on-write的)。 – Ryan 2013-02-28 01:37:10

0

输出缓冲可能是洗涤,它甚至可能会提高性能。 CPU浪费的缓冲被保存在减少I/O中。套接字写入实际上是数千条指令。唯一可能成为问题的是输出量会对内存使用产生不利影响。如果你缓冲了很多兆字节的输出,你可能需要考虑某种形式的流媒体。

这是关于此主题的旧帖子PHP output buffering - sounds like a bad idea, is it?