我刚开始使用OOP,所以这些是我的第一个babysteps!
我正在尝试构建一个简单的预订系统,用户可以通过日历预订其他用户创建的时间段。我现在处于项目的早期阶段,所以数据库还没有建立,我现在正在摆弄一天课和一个时段课,并试图弄清楚如何使它们互动。
这是我的代码:
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
的每个实例化时调用它吗? / p>
示例:
$day1 = new dayCL(1);
$bookingSlot1 = new bookingSlotCL(1);
$bookingSlot2 = new bookingSlotCL(1);
这两个预订广告位都放在$day1
上,因此$day1->getNumBookingSlotsOnDay
应该返回“2”。
日历的设计使所有日期都被实例化为dayCL
实例,这意味着bookingSlotCL
实例将始终附加dayCL
实例。
答案 0 :(得分:3)
您应该将所有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);
}
答案 1 :(得分:1)
是的,您可以将类实例化为类的属性,然后通过它进行调用:
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);