【问题标题】:Can an instance from one class change variables in an instance of another class?一个类的实例可以更改另一个类的实例中的变量吗?
【发布时间】:2015-09-24 14:08:46
【问题描述】:

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

【问题讨论】:

    标签: php class oop


    【解决方案1】:

    您应该将所有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);
    }
    

    【讨论】:

    • echo $day1->days[0]->output();也可以!这就是我一直在寻找的解决方案!惊人的!谢谢! :)
    【解决方案2】:

    是的,您可以像这样将类实例化为类的属性,然后从中调用:

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

    【讨论】:

      猜你喜欢
      • 2015-06-09
      • 2014-11-19
      • 1970-01-01
      • 2023-03-28
      • 2020-08-24
      • 1970-01-01
      • 2010-12-07
      • 1970-01-01
      • 2023-03-08
      相关资源
      最近更新 更多