2

我正在编写一个新的预订系统,因为我之前写的一个现在已经使用了几年而且看起来很次品。我想写一个非常灵活和可移植的,我想使用类。

我是 php 语言中的类和 OOP 的新手,我之前写过一堂课,而且进展顺利。但是,我现在对此感到困惑。这是我到目前为止所拥有的:

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设置aaddressdates. 这样,我想,person 对象会做出相应的反应,只允许设置这些东西,并且只在被要求时处理这些参数。但后来我发现 - 当我创建时new Person(),它也会自动运行class Orders()!我不希望它这样做。我想Orders()成为制定所有要求并总体上管理整个秩序的霸主,而人只是成为该秩序中的一个人。

我不确定我的问题是否是因为我使用extend而不是implements或类似的东西,但是有人可以解释一下我接下来应该改变或做什么吗?我渴望学习。

4

2 回答 2

2

如果您不希望父类的构造函数在子对象的实例化时运行,则需要为子类添加构造函数。这可以是一个空函数:

Person

function __construct() 
{
  // uncomment the next line should you want to call the parent constructor
  // parent::__construct();
}   
于 2013-03-07T22:19:37.573 回答
0

您的问题是您使用继承的方式,即扩展。人们通常会说,如果类具有“is-a”关系,那么继承是很好用的。对于两个类 A 和 B,如果说“B 是 A 的一种”是合乎逻辑的,那么让 B 扩展 A 是可以的。

//jk

于 2013-03-07T22:20:44.487 回答