1

私は php タグの外側に html を書くことを好むので、Eclipse は適切な構文強調表示で html を表示できます。連結方法は書くのが難しく、強調表示されません (以下の 2 つの例を参照してください)。

長々と申し訳ありません。これらの例は非常に単純なので、読みやすいはずです。

私はこれが好きではありません.「引用符」と「$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>Any の中に 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>私が心配しているのは、それぞれが単一の出力バッファリングを開始/停止する可能性のある数千のアイテムの過剰な反復です。

また、私がやろうとしていることを行うためのフレームワークやより良い方法を誰かが知っていれば、どんな提案もいただければ幸いです!

4

2 に答える 2

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ではありません。

于 2013-02-28T01:26:29.383 に答える
0

出力バッファリングはおそらくウォッシュですが、パフォーマンスが向上することさえあります。CPU の無駄なバッファリングは、少ない I/O で節約されます。ソケット書き込みは、実際には数千の命令です。問題になる可能性があるのは、出力量がメモリ使用量に悪影響を与える場合のみです。また、何メガバイトもの出力をバッファリングしている場合は、おそらく何らかの形式のストリーミングを検討する必要があります。

これは、このトピックに関する古い投稿です PHP 出力バッファリング - 悪い考えのように聞こえますか?

于 2013-02-28T01:36:20.767 に答える