2015-09-24 57 views
3

我剛剛開始使用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的每一個實例?

實施例:

$day1 = new dayCL(1); 
$bookingSlot1 = new bookingSlotCL(1); 
$bookingSlot2 = new bookingSlotCL(1); 

兩個預訂槽被放置在$day1所以$day1->getNumBookingSlotsOnDay應該返回「2」。

日曆的設計使所有的日子都被實例化爲dayCL實例,這意味着一個bookingSlotCL實例將始終有一個要連接的實例dayCL

回答

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); 
} 
+0

回聲$ day1->天[0 ] - >輸出();作品也是!這是我正在尋找的解決方案!真棒!謝謝! :) –

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); 
相關問題