2

私が以前に書いたものは今では何年も前のもので見栄えが悪いので、新しい予約システムを書いています。私は非常に柔軟で移植可能なものを書きたいと思っており、クラスを使用したいと思っています。

私は php 言語のクラスと OOP を初めて使用します。以前に 1 つのクラスを作成したことがありますが、それはうまくいきました。しかし、私は今これで混乱しています。これは私がこれまでに持っているものです:

class Order 
{
    protected $require_gender = false;
    protected $require_age = false;
    protected $require_names = false;   
    protected $require_address = false; 
    protected $require_contact = false; 
    protected $require_dates = false;   
    protected $require_additional = false;

    function __construct() 
    {
        foreach(func_get_args() as $arg)
        {
            switch($arg) 
            {
                case "names":
                case "name": $this->require_names = true; break;
                case "age": $this->require_age = true; break;
                case "mf":
                case "gender": $this->require_gender = true; break;
                case "address": $this->require_address = true; break;
                case "contact": $this->require_contact = true; break;
                case "date":
                case "dates": $this->require_dates = true; break;
                case "additional": $this->require_additional = true; break;
            }
        }
    }   
}
class Person extends Order 
{   
    private $gender;
    private $age;
    private $names = array('first' => "", 'last' => "", 'full' => "");
    private $address = array(   '1' => "",
                    '2' => "",
                    '3' => "",
                    '4' => "",
                    'Postcode' => "",
                    'Country' => "");
    private $contact = array('telephone' => "", 'email' => "");
    private $dates = array();
    private $additional;
    private $active;    

    function setGender($var)        {$this->gender = $var;}
    function setAge($var)       {$this->age = $var;}
    function setNames($var)         {$this->names = $var;}
    function setAddress($var)       {$this->address = $var;}
    function setContact($var)       {$this->contact = $var;}
    function setDates($var)         {$this->dates = $var;}
    function setAdditional($var)    {$this->additional = $var;}
    function setActive($var)        {$this->actrive = $var;}
}

これまでのところ、とても良いと思います。しかし今、私は混乱しています。いわゆる「スーパークラス」または親がクライアントの注文になると考えたからです。それが彼らがしていることなので、彼らはチケットを注文しています。そしてその下に、必要なだけ人を追加する必要があります。

また、(移植可能にするために)要件を設定できるようにしたいと考えています。これは、要件を変更する必要があるため、予約システムごとに使用されます。誰もが日付や住所などを知りたがるわけではありません。これは人によって異なりますが、このコードが使用されるたびに異なります。だから私は論理的に私が書くだろうと考えました:

$order = new Order("names","address","dates");

$p = new Person();

new Order次に、使用したい要件で と をnamesセットアップaddressしますdates。このようにして、人物オブジェクトはそれに応じて反応し、それらの設定のみを許可し、要求されたときにのみそれらのパラメーターを処理することができると私は考えました。new Person()しかし、その後、 を作成すると、それも自動的に実行されることがわかりましたclass Orders()。私はそれをしたくありません。私Orders()はすべての要件を設定し、一般的に秩序全体を統治する大君主であり、人はその秩序の中の一人になりたい.

私の問題がextend代わりに使用しているためか、implementsまたはそのようなものを使用しているためかどうかはわかりませんが、次に何を変更または実行する必要があるかを誰かが説明してもらえますか? 私は学びたいと思っています。

4

2 に答える 2

0

あなたの問題は、継承の使用方法、つまり拡張です。通常、クラスが「is-a」関係にある場合、継承を使用するとよいと言われます。2 つのクラス A と B の場合、「B は A の一種である」と言うことが論理的であれば、B に A を拡張させても問題ありません。

//jk

于 2013-03-07T22:20:44.487 に答える