一个类的实例可以更改另一个类的实例中的变量吗?


Can an instance from one class change variables in an instance of another class?

我刚刚开始使用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);