我正在编写一个新的预订系统,因为我之前写的一个现在已经使用了几年而且看起来很次品。我想写一个非常灵活和可移植的,我想使用类。
我是 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
设置aaddress
和dates
. 这样,我想,person 对象会做出相应的反应,只允许设置这些东西,并且只在被要求时处理这些参数。但后来我发现 - 当我创建时new Person()
,它也会自动运行class Orders()
!我不希望它这样做。我想Orders()
成为制定所有要求并总体上管理整个秩序的霸主,而人只是成为该秩序中的一个人。
我不确定我的问题是否是因为我使用extend
而不是implements
或类似的东西,但是有人可以解释一下我接下来应该改变或做什么吗?我渴望学习。