7

クラス関数内でhtmlを使用することに何か問題がありますか?DOMで呼び出すので、文字列を返す必要はありません。

public function the_contact_table(){
    ?>
    <div>
        some html here
    </div>
    <?php
}

また、文字列が必要な場合は、このメソッドを使用しますか?より良い方法はありますか、それともこれは比較的標準的ですか?

public function get_single(){
    ob_start();?>
        <div class='staff-member single'>
            <div class='col left'>
                <div class='thumbnail'>
                    thumbnail
                </div>
                <?php $this->the_contact_table(); ?>
            </div>
            <div class='col right'>

            </div>
        </div>      
    <?php
    $content = ob_get_contents();
    ob_end_clean();
    return $content;
}

アップデート

なぜ私がこれをしているのか説明すべきだった。Wordpressプラグインを作成していて、投稿タイプの出力を制御したいと思います。だから私は以下のようなフィルターを使用しています

public function filter_single($content){
     global $post;
     if ($post->post_type == 'staff-member') {

         $sm = new JM_Staff_Member($post);
         $content = $sm->get_single();
     }
     return $content;
}

ご覧のとおり、WordPressコアに文字列を返す必要があります

4

3 に答える 3

4

長い文字列を変数に格納する場合は、出力バッファリングの代わりにHEREDOCを使用する必要があります。次のようになります。

$content = <<<EOD
content here
EOD;

EOD何でもかまいませんが、次の 2 つの重要な点に注意してください。

  1. その前に空白を入れることはできず、独自の行にある必要があります
  2. コンテンツ内で見つかる文字列であってはなりません

PHP >= 5.3 を使用している場合は、ドキュメント内の変数を解析しない NOWDOC を使用する必要があります (必要な場合を除く)。NOWDOC の構文との唯一の違いは、センチネルが引用符で囲まれていることです。

$content = <<<'EOD'
content here
EOD;

私が出力バッファリングから離れた理由は、サーバーがクライアントに送信されたデータをチャンク化するのを防ぐためです。これは、コンテンツが徐々にクライアントに送信されて表示されるのではなく、一度に強制的に送信されるため、リクエストが遅く見えることを意味します。出力バッファリングは、関数がデータを返す代わりに不注意echoにデータを返す場合や、特定の必要がある特定のアプリケーション用のツールである場合のハックです。また、出力バッファリングを使用した場合 (関数呼び出しが含まれるため)、文字列を変数に HEREDOC したり、ビューを含めたりする場合、実行時間に影響を与えることも想像できます。

適切かどうかという質問に答えるために、MVC アプリケーションでは、すべての HTML およびその他のコンテンツを独自のビューに含める必要があると言えます。その後、コントローラーは自分自身を表示するビューを呼び出すことができ、ビューの表示に関連するコードを知る必要はありません。ビューに情報 (タイトル、作成者、タグの配列など) を渡すことはできますが、ここでの目標はコンテンツをロジックから分離することです。

とは言っても、Wordpress のテンプレートとコードは最初はかなりずさんに見えますが、MVC をまったく実装していない場合でも緩いので、このためのビューを作成するのが面倒な場合は、ずさんさが WP のスタイルに合っていると思います.

于 2012-07-29T06:02:21.127 に答える
4

PHP クラス ファイル内に実際の「ビュー」を配置して、フロントエンド開発者を疎外するという事実に関しては、良い習慣ではありません。PHP を一般的に使い始めたときの最大の問題の 1 つは、クラス内でコンテンツを動的に作成したかったことです。これは素晴らしいアイデアですが、チームの多くのメンバーができるだけスムーズに共同作業できるようにする必要があります ;].

おそらく、「staff-member-single.php」という別のファイル内にコンテンツが含まれているはずです。これを関数で呼び出します。

public function get_single(){
    ob_start();
    require_once('views/staff-member-single.php');
    $content = ob_get_contents();
    ob_end_clean();
    return $content;
}

ただし、通常はそれを再利用可能なメソッドにリファクタリングするので、少し似ています..

public function get_single()
{
    $string = $this->render_view_as_string('satff-member-single');
    return $string;
}

public function render_view($view)
{
    require('views/'.$view.'.php');
}

public function render_view_as_string($view)
{
    ob_start();
    $this->render_view($view);
    $content = ob_get_contents();
    ob_end_clean();
    return $content;
}
于 2012-07-29T06:06:17.280 に答える
2

アプリケーションのロジックのみに PHP を使用し、一部のデータをビュー レイヤー (テンプレート エンジン) に送信することは良い方法だと思います。これに合わせてMVCのようなパターンもいくつかあります。

于 2012-07-29T06:01:52.873 に答える