2012-01-13 9 views
0

私は、人々が同時に従業員、顧客、会社のメンバーであるかもしれないデータベースを持っています。私の管理システムでは、Person,EmployeeCustomerおよびMemberのオブジェクトのプロパティを独立したページに編集することができます。このクラス構造はどのようにPHPで記述するべきですか?組成、継承、デコレータ?

今、私はPersonを呼び出すことができますが、従業員、顧客、およびメンバーのプロパティを同じページで表示および編集できるようにしたいと考えています。このシナリオのビューを作成するのは簡単ですが、基本クラス、継承、コンポジションなどの正しい仕様で適切に作成したいと考えています。

私は、従業員、顧客、私の管理ページでは、UberDudeという人物、従業員、顧客、およびメンバークラスのcompositionである新しいクラスを作成する必要があると考えています。また、この新しいクラスをコレクションの一部として使用して、すべての人のテーブルを作成し、従業員、顧客またはメンバーであるかどうかを確認することもできます。何かが正しくないと思われ、クラス構造のコードを解読できません。何か案は?

+0

従業員、顧客、およびメンバーがすべての種類の人(人)であると言うのは本当ですか? –

+0

はい、どちらも、親クラス 'Person'なしで意味をなさない。 – boatingcow

答えて

0

継承の問題のような音です。 Personがありますが、その人はEmployeeまたはCustomerなどのより具体的な用語で説明することができます。

通常、オブジェクト指向プログラミングでは、基本クラス(この例ではPerson)から始めて、拡張サブクラスにプロパティを追加します。したがって、Personに名前がある場合、Employeeに従業員番号があるかもしれませんが、Customerであれば意味がありません。あなたは何ができるか

は、Decoratorパターンを実装し、ちょうどあなたのPersonクラスに構築しておくです。私はあなたが現在あなたの現在のアプリケーションにユーザーのプロフィールを構築しているかわからないんだけど、次のように、それは擬似コードになります:

<?php 

$id = intval($_GET['person_id']); 

$employee = new Employee(new Person($id)); 

これはあなたのPersonクラスをインスタンス化します、そしてあなたに渡されることEmployeeクラスは、従業員に固有の追加のプロパティおよびメソッドで装飾されます。

+0

顧客とメンバーのプロパティをどのように引き渡しますか?従業員は人ですが、必ずしも顧客が従業員であるとは限りません。 – boatingcow

+0

その場合は、別のクラスでデコレートしたり、デコレーションをチェーンすることができます。つまり、 '$ person = new Customer(new Employee(new Person($ id)));です。結果として得られる '$ person'オブジェクトは、それを装飾するために使われたクラスのプロパティを持ちます。 –

+0

申し訳ありませんが、Personクラスがどのように構築されるかはまだ不明です。余分な従業員、顧客などのプロパティを持たずに、引き続き独自のPersonクラスを使用したいと思います。つまり、基本クラスのPersonクラスと、従業員ページのアクセス権を持つすべてのクラスをクラス化するクラスの2つが必要です。申し訳ありませんが不明な場合は! – boatingcow

関連する問題