2011-07-07 18 views
4

私はウェブサイトを作ってすぐに自分のコードが混乱していることを知りました。私がPHPでプログラミングして以来、しばらくして以来、私はOOPを学びました。今、C#やJavaでアプリケーションを作るのは、この観点からはかなり簡単ですが、PHPは私にトラブルを与えています。PHPアプリケーション構造

1つの行から別の行に(phpで)すべてをプログラムしていましたが、メソッドの量は最小限で、クラスは全くありませんでした。 どのくらいのメソッドにする必要があります、そして、このクラスはどこですか?

例: 私はaccount.phpを持っており、ユーザー情報を更新したいと考えています。だから誰かがいくつかのデータを送ったことを確認した後if(isset($_POST[..次は?私はちょうど のようなすべてのチェックを$email=CheckForRisksOrSomething($_POST["email]);のようにしてから、mysqlを更新するだけでした。

私はクラスのユーザーを作成する必要があります。どのような方法を含めるべきですか?またWHEREこのクラスを保存すると、user.phpにユーザーのプロフィールが表示されるはずです。

戻るクラスにする必要がありますどのくらいに、私は同じようにファイルに使用する必要があります。

$smth = new Someclass(); 
if($smth->checkIfSaved()){ 
    $user = new User(); 
    $user->updateUser(/* all the $_POST stuff here? */); 
} else { 
    $smth->showUserDetailsForm(); 
} 

またどこ工assを保存する必要がありますか?

したがって、もし私がの例を教えたら、以下の機能を構造化する方法(ファイル、クラス、および場合によってはメソッド)。 (また、コメント付き)、それのコメント

  • ニュース
  • 管理
    • ユーザー(登録、ログイン、アカウントの編集...)
    • 絵これは単なる一例ですもちろん、私は私の混乱を続けて、3日後にそれを見て、ただのfacepalmを見て、私がそこに何を書いたのか疑問に思っていません。さて、私はすでにそれをしていたので、私は頼んでいるのです。


      EDIT 2016年2月24日

      フレームワークに見て示唆したように、これは、古い質問ですが。それを設定するには少し時間がかかるかもしれませんが、開発スピードが向上します。コードはきれいで清潔で安全です。私は個人的にLaravelを使用します。

    +0

    これを学ぶ最も良い方法は、既存の多くのWebフレームワークを研究することです。 – webbiedave

    +0

    多分、彼らは通常大きいですし、あなたはすぐに失われ、あなたが探しているものを忘れることができます。それでも、どちらをお見せしたいのですか? –

    +0

    symfony、CakePHP、Zend Framework、CodeIgniterの4つを見ることができます。 OOPであることに加えて、MVCアーキテクチャパターンも採用しています。 – webbiedave

    答えて

    3

    この猫には複数の方法がありますが、役に立つリンクや書籍をお勧めします。

    Zend's Coding Standards:ファイルの構造、名前などについては、Zendがこれらのことをどのように提案しているかを見ていきます。ガイドラインに従うことで、これらの同じメソッドを使用して、他の誰かのコードと互換性のあるパッケージを作成することができます。

    あなたがしたいことは、あなたのクラス専用のフォルダを作成することです。どのように新しいクラスを作る必要があるのか​​、何を含めるべきかをどのように知っていますか?良い質問!

    あなたが関連する情報のグループに遭遇したり、一緒に多くのことを処理したり、特定の問題を解決する必要がある場合は、それを処理できる新しいクラスを作成する必要があります。

    たとえば、サイトのユーザーに加えるすべての変更を処理するUserクラス。別の例は、管理者であるかどうかによってタスクを実行できる(または実行しない)Roleクラスです。オブジェクトとクラスについての素晴らしい点は、UserクラスのUser :: $ role(Userクラスに$ roleという名前の変数)を作成できることです。たとえば、UserオブジェクトにRoleオブジェクトがあります。あなたは、各クラスが唯一それが持っているべきであるとの情報を扱うように、あなたのコードは、構造化と独立し続けることになるでしょう、一般的には

    class User { 
        private $username; 
        private $role; 
    
        function __construct($username){ 
         $this->username = $username; 
        } 
        public function setRole($roleType){ 
         switch($roleType){ 
          case "admin": 
           $this->role = new Admin(); // contained in another class file 
           break; 
          case "staff": 
           $this->role = new Staff(); // contained in another class file 
           break; 
          default: 
           $this->role = new Visitor(); // contained in another class file 
          } // end case 
         } // end setRole 
    } // end Class User 
    
    $loggedInUser = new User("Bubba"); 
    $loggedInUser->setRole("admin"); 
    $loggedInUser->role->deleteMessage(); 
    

    :ここからは、ユーザーオブジェクトは、今のような何かを行うことによって、ロールオブジェクトに呼び出すことができますそれ以上のことはしないでください。あまりにも多くのことをするクラスを見つけた場合は、この新しい責任を扱う別のクラスを作成する良い時間を見つけました。どのようにそれを結びつけるかは、一般的に「デザインパターン」で答えられる問題です。オブジェクトとクラスを使ったプログラミングとデザインパターンの両方を扱う非常に良い本があります。

    Matt Zandstraの書籍 "PHP 5 Objects、Patterns and Practice"をチェックし、Apressによって出版されています。あなたのつま先をPHPでOOPに落とす素晴らしい本です!

    +0

    また、上記のコードにコメントしたかったのです。 $ loggedInUser-> role-> deleteMessage(); User :: $ roleがprivateではなくpublicに設定されている場合にのみ機能します。私は混乱したくないので、これを別のコメントとして設定しています:DあなたはUser :: $ロールをプライベートとして保持し、「ゲッター」メソッドを使ってアクセスし、 $ loggedInUser-> getRole() - > deleteMessage();があります。 – anw

    0

    私の答えはあなたの質問に直接答えるものではないかもしれませんが、あなたには良いことがあります。

    実際のフレームワークを使用してください。コードをゼロから作成しないでください。それはあなたに莫大な時間を節約し、コード分離の良い習慣を使用するように強制します、本当に良いとクリーンなプロジェクトの構造が、それはあなたに時間を節約します!あなたはそこに実装することを決めた多くの事のために、準備ができたソリューションがあり、あなたが(電子メールアドレスの検証として)共通のことは正しい方法で行われます。

    私はMVC PHPフレームワークを使い、過去にCakePHP、Zend、Kohanaなどを使用した後、Yiiと一緒に行くことをお勧めします。非常に小さな学習曲線、素敵なドキュメント、素敵な活発なコミュニティ、あなたはすでに持っているものを、とても短い時間で移植することができます。

    私は、フレームワークが少なくとも2回はあなたの時間を短縮し、同時にあなたが上で尋ねたすべてのことをすでに解決していることを記述したプロジェクトについてはかなり確信しています。私は経験からこれを知っています。かなり前からゼロからプロジェクトを開発しました。

    +0

    私はあなたが提案したものをトレイに載せるかもしれませんが、私はまだウェブサイトを構成する最良の方法を知りたいと思っています。 –

    +1

    さて、MVC構造が必要です.YiiやCakePHPやCodeIgniterの構造をチェックしてみてください。また、このような単一のエントリーポイント(index.phpファイル)と構造体を持っているという美しいものがあります。 pleblanc.com/wp-content/uploads/2010/03/smvc-structure.pngしかし、自動ロードなどもあり、すべてを自分で管理するよりもずっと簡単になるでしょうより多くの時間を消費する方法。 – ddinchev

    +1

    ここでは、非常に単純なMVCフレームワークを自分で構築する方法についての記事があります:http://www.pleblanc.com/2010/03/building-a-simple-mvc-framework/ – ddinchev

    1

    どのようにすればいいのかを伝えるのは非常に難しいです。そこには多くの異なる設定があります。 ZendKohanaCodeIgniterなどのフレームワークを見てください。私はOOPの設計で小さなアプリケーションを作成する場合

    、私は通常、次の階層に従ってみてください:index.php

    • bootstrap.phpが含まれます。
    • bootstrap.phpには、すべてのクラスと設定が含まれています。
    • coreフォルダーにコア機能を保存できるclassesディレクトリを作成します。
    • classesディレクトリには、controllersmodelsの2つのフォルダが作成されます。
    • 私のプロジェクトでは、通常、私のすべてのhtmlファイルが入っている(そして後でSmartyテンプレートエンジンでレンダリングされる)別のフォルダtemplatesがあります。

    これは非常に単純化されたアプローチですが、正しい方向に導くことができます。ユーザー、写真などのような要件のために、1人のユーザーのすべてのデータを含むモデルを作成します。

    class UserModel() { 
        public $name; 
        public $email; 
    } 
    

    そして、このモデルを変更することができ、コントローラ:

    class UserController() { 
        public function update($user) { 
         ... 
        } 
    } 
    
    0

    あなたがウェブ用アプリケーションを開発する場合、あなたは私に知られているMVCフレームワークの最も簡単な、MVCアプリケーションを開発することになる高い可能性がありますCodeIgniterです。そして、私はあなたにそれを使うよう助言します。

    関連する問題