我刚刚开始使用OOP,所以这是我的第一步!
我试图建立一个简单的预订系统,用户可以通过日历预订已由另一个用户创建的时间段。我正处于项目的早期阶段,所以数据库还没有建立起来,我目前正在摆弄一个日课和一个时隙课,并试图找出如何使它们相互作用。
下面是我的代码:
class dayCL {
public $dayInMonth;
public $numBookingSlotsOnDay;
public function __construct($dayInMonth) {
$this->dayInMonth = $dayInMonth;
}
public function getNumBookingSlotsOnDay(){
return "Booking slots: " . $this->numBookingSlotsOnDay;
}
public function numBookingSlotsOnDay(){
$this->numBookingSlotsOnDay = $this->numBookingSlotsOnDay + 1 ;
}
};
class bookingSlotCL {
public $startTime;
public function __construct($startTime) {
$this->startTime = $startTime;
}
public function output(){
return "Start: " . $this->startTime;
}
};
numBookingSlotsOnDay
函数在调用时按预期工作,但是是否有可能在bookingSlotCL
中集成对它的调用,因此在bookingSlotCL
的每个实例化时都调用它?
的例子:
$day1 = new dayCL(1);
$bookingSlot1 = new bookingSlotCL(1);
$bookingSlot2 = new bookingSlotCL(1);
两个预订槽都放在$day1
上,因此$day1->getNumBookingSlotsOnDay
应该返回"2"。
日历被设计成所有的日子都被实例化为dayCL
实例,这意味着bookingSlotCL
实例总是有一个dayCL
实例来附加。
您应该将所有bookingSlotCL
实例添加到dayCL
实例中的数组中,如下所示:
$day1 = new dayCL(1);
$day1->addBooking(new bookingSlotCL());
addBooking
方法可以是这样的:
public function addBooking(dayCL $day) {
$this->days[] = $day;
$day->startTime = $this->dayInMonth
}
这样,你甚至可以改变你的getNumBookingSlotsOnDay
方法来动态确定预订插槽的数量:
public function getNumBookingSlotsOnDay() {
return count($this->days);
}
是的,您可以像这样将类实例化为类的属性,然后从它调用:
class bookingSlotCL {
public $startTime;
public $dayCL;
public function __construct($startTime) {
$this->startTime = $startTime;
$this->dayCL = new dayCL();
}
public function output() {
return "Start: " . $this->startTime;
}
};
这样写:
$bookingSlotCL = new bookingSlotCL(1);
$bookingSlotCL->dayCL->numBookingSlotsOnDay(1);