2013-02-28 59 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?