4

私はウェブサイトを作り始めました、そしてすぐに私は私のコードが混乱していることに気づきました。PHPでプログラミングしてからしばらく経ち、それ以来OOPを学びました。この観点からすると、C#またはJavaでアプリケーションを作成するのは非常に簡単ですが、PHPは私に問題を引き起こします。

私は以前、(phpで)すべてを1行から別の行にプログラムし、メソッドの数を最小限に抑え、クラスをまったく使用していませんでした。では、メソッドにはどのくらいの量を含める必要があり、このクラスはどこに置く必要がありますか?

例: account.phpがあり、ユーザー情報を更新したい。では、誰かがデータを送信したことを確認した後、if(isset($_POST[..次に何をしますか?以前は、のようにすべてのチェックを行ってから、$email=CheckForRisksOrSomething($_POST["email]);mysqlを更新していました。

これは私に質問をもたらします、私はクラスUserを作成するべきですか、そしてそれはどのメソッドを含むべきですか?また、user.phpがユーザーのプロファイルを表示すると仮定して、このクラスをどこに保存する必要があります

クラスにいくらあるべきか、次のようなファイルで使用する必要があります。

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

また、Someclassはどこに保存する必要がありますか?

したがって、ayoneが、次の機能(ファイル、クラス、場合によってはメソッド)を構造化する方法の例を教えてくれます。

  • ユーザー(登録、ログイン、アカウントの編集..)
  • コメント付きの写真
  • ニュース(コメント付き)
  • 管理

これはもちろん一例ですが、私は自分の混乱を続けて、3日後にそれを見て、ただ顔をしかめて、そこに何を書いたのか疑問に思います。ええと、私は今日すでにそれをしました、それが私が尋ねている理由です。


2016年2月24日編集

これは古い質問ですが、提案されているように、フレームワークを調べてください。設定には少し時間がかかるかもしれませんが、開発速度は向上しますが、コードは素晴らしくクリーンで、はるかに安全です。私は個人的にLaravelを使用しています。

4

4 に答える 4

3

この猫の皮を剥ぐ方法は複数ありますが、役立つリンクや本をお勧めします。

Zendのコーディング標準:ファイルの構造化や名前付けなどの方法を検討している場合は、Zendがこれらのことを行うためにどのように提案しているかを検討します。彼らのガイドラインに従うことで、これらの同じ方法を使用して、他の誰かのコードと互換性のあるパッケージを作成することもできます。

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

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

たとえば、サイトのユーザーに加えたいあらゆる種類の変更を処理するUserクラス。もう1つの例は、管理者であるかどうかに応じてタスクを実行できる(または実行できない)Roleクラスです。オブジェクトとクラスのすばらしい点は、Roleクラスである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();

一般に、コードを構造化して分離し、各クラスが必要な情報のみを処理し、必要以上のことを行わないようにする必要があります。クラスがあまりにも多くのことをしていることに気付いた場合、これは、この新しい責任を処理するために別のクラスを作成する良い機会を見つけたことを意味します。それをどのように結び付けるかは、一般的に「デザインパターン」で答えられる問題です。オブジェクトとクラスを使用したプログラミングと、デザインパターンの使用の両方をカバーする非常に優れた本があります。

MattZandstraによる「PHP5Objects、Patterns、andPractice」という本をチェックしてください。Apressから出版されています。PHPを使ってOOPに足を踏み入れる素晴らしい本です!

于 2011-07-07T16:17:13.333 に答える
1

あなたがそれをどのようにすべきかをあなたに言うのは非常に難しいです。そこには多くの異なる好みがあります。ZendKohanaCodeIgniterなどのフレームワークを見てください。

OOP設計で小さなアプリケーションを作成するときは、通常、次の階層に従うようにします。

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

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

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

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

class UserController() {
    public function update($user) {
        ...
    }
}
于 2011-07-07T16:12:16.840 に答える
0

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

実際のフレームワークを使用してください。コードを最初から使用してWebサイトを構築しないでください。それはあなたに莫大な時間を節約し、あなたにコード分離の良い習慣、本当に良くてきれいなプロジェクト構造を使わせるでしょう、しかし再び、それはあなたに時間を節約するでしょう!そこに実装することを決定した多くのことについては、すぐに解決できるソリューションがあり、(電子メールアドレスの検証として)行う一般的なことは正しい方法で行われます。

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

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

于 2011-07-07T16:05:41.220 に答える
0

Web向けに開発している場合、MVCアプリケーションを開発する可能性が高くなります。私が知っている最も単純なMVCフレームワークはCodeIgniterです。そして、私はあなたにそれを使うようにアドバイスします。

于 2011-07-07T16:13:25.510 に答える