一个类中的实例是否可以在另一个类的实例中更改变量?

时间:2015-09-24 14:08:47

标签: php class oop

我刚开始使用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实例。

2 个答案:

答案 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);