2011-09-15 8 views
2

私はこのクラスを持っていて、私はそれが無駄だと思いますか?私はこれを行う必要がありますか?私はどのようにクラスの仕事を理解し、どのようなものを良いものにしているのですか(ウェブサイトの視点では)彼らは何を持っているのか理解していません。あなたはこれをクラスファイルの愚かな使用と考えますか?

<? 
class PageHandler { 
    var $html; 
    function header() { 
     $this->html .= "<html> 
      <head> 
       <title>Nuclear Summer</title> 
      </head> 
     <body>"; 
    } 
    function footer() { 
     $this->html .= " 
      </body> 
      </html> 
      "; 
    } 
    function input ($html) { 
     $this->html .= $html; 
    } 
    function output() { 
     echo $this->html; 
    } 
} 
?> 
+0

クラスを使用している場合は、MVCフレームワークを使用しているとします。その場合、HTMLマークアップ(ビュー)をクラス(モデル)に入れてはいけません。 –

+0

ありがとう、あなたはいくつかのフレームワークとMVCを見上げています。 –

答えて

1

はい。

これはクラスの悪い使用です。あなたがクラスを使用しているのはビューのためのものです(もしあなたがMVCのアプローチに向いているなら、これは良い方法です)。

すべてのページ(ヘッダー、フッターなど)に共通のコードを含むメインのlayoutビューを作成し、受信したリクエストを適切なコントローラにルーティングします。

CodeIgniterは、MVCを把握するための素晴らしいPHPフレームワークです。それはdocumentation on itでさえあります。

+0

ヘルパークラスの中にhtmlをラップすると何が問題になりますか? MVCは、データベース操作、Webサイトのロジック、およびビジュアル出力の分割についてのもので、操作方法に関するものではありません。 – Profet

1

PageHandlerは「ビュー」クラスのようなものです。ページのインスタンスを作成し、より多くの機能を提供することができます。あなたはヘッダーとフッターを再利用しています。だから、それは一般的に神のアイディアです。

しかし、あなたの例はそれについてもっと簡単に言います。

+0

ありがとう、私は、さまざまなものを含めるために、CSSやスクリプト機能のようなものを追加することを考えていました。しかし、それは少し意味がないようです?文字通り、header.phpとfooter.phpというファイルを含めて言うよりも、これは優れていますか? –

+1

あなたのユースケースによっては何もありません。 PHPを純粋に再利用可能な塊で分割する場合は、 'header.php'タイプのファイルを作成してから' include'してください。 – Alex

1

これはPHP4とPHP5のための通常ではないため一例であり、またこれは、出力テンプレートを作成するには、クラスのための最善の使用方法ではありません、Zend Frameworkのを探求しようと、それはOOPとMVCの良い十分な例であるPHP http://framework.zend.com/manual/en/

PHP5のためのあなたのコードの例が、まだドキュメントコンストラクタとしてクラスを使用してOOP

class PageHandler { 

    private $html; 

    private function header() { 
     $this->html .= "<html> 
      <head> 
       <title>Nuclear Summer</title> 
      </head> 
     <body>"; 
    } 
    private function footer() { 
     $this->html .= " 
      </body> 
      </html> 
      "; 
    } 
    public function input ($html) { 
     $this->html .= $html; 
    } 
    public function output() { 
     $this->html = $this->header() . $this->html . $this->footer(); 
     return $this->html; 
    } 
} 

$page = new PageHandler(); 
$page->input('some content'); 
echo $page->output(); 
0

ための最良の使用量は普通のではありませんが、私は少しであるためにあなたのクラスにいくつかの修正を行うことをお勧めしませんあなたのアプローチではより意図的です。 classちょっと(lolz)それをどうやってするのか、いくつかのアイデアを見てみましょう。覚えておいてください。constructoroutput bufferの両方が、ドキュメント出力を扱う際には素晴らしい友達です。

関連する問題