2012-02-20 31 views
0

我試圖學習立面圖案,但遇到了問題。 PHP不會從PrintPrice方法輸出$ totalprice。此外,在這裏,在附加信息:初始化和對象後的var_dump給我:PHP立面圖案

private 'SkiRent' => 
object(SkiRent)[2] 
private 'SkiResortTicketSystem' => 
object(SkiResortTicketSystem)[3] 
private 'HotelBookingSystem' => 
object(HotelBookingSystem)[4] 
private 'totalprice' => null 

但調用的var_dump後HaveGoodRest給我的空白頁。 我不知道你能不能幫我,這裏是代碼:

<?php 
class SkiRent 
{ 
public function RentBoots($feetSize, $skierLevel) 
{ 
    return 20*$skierLevel*100/$feetSize; 
} 
public function RentSki($weight, $skierLevel) 
{ 
    return 40*$skierLevel*100/$weight; 
} 
public function RentPole($height) 
{ 
    return 5*$height/100; 
} 
}; 

class SkiResortTicketSystem 
{ 
public function BuyOneDayTicket() 
{ 
    return 115; 
} 
public function BuyHalfDayTicket() 
{ 
    return 60; 
} 
}; 

class HotelBookingSystem 
{ 
public function BookRoom($roomQuality) 
{ 
    switch ($roomQuality) 
    { 
     case 3: 
      return 250; 
     case 4: 
      return 500; 
     case 5: 
      return 900; 
     default: 
      throw new ArgumentException("roomQuality should be in [3;5]");  
    } 

    } 
}; 

class SkiResortFacade 
{ 
private $SkiRent; 
private $SkiResortTicketSystem; 
private $HotelBookingSystem; 
private $totalprice; 

function __construct() 
{ 
    $this->SkiRent = new SkiRent(); 
    $this->SkiResortTicketSystem = new SkiResortTicketSystem(); 
    $this->HotelBookingSystem = new HotelBookingSystem(); 
} 

function HaveGoodRest($height, $weight, $feetSize, $skierLevel, $roomQuality) 
{ 
    $skiPrice = $SkiRent->RentSki($weight, $skierLevel); 
    var_dump($skiPrice); 
    $skiBootsPrice = $SkiRent->RentBoots($feetSize,$skierLevel); 
    $polePrice = $SkiRent->RentPole($height); 
    $oneDayTicketPr = $SkiResortTicketSystem->BuyOneDayTicket(); 
    $hotelPrice = $HotelBookingSystem->BookRoom($roomQuality); 

    $this->totalprice = $skiPrice + $skiBootsPrice + $polePrice + $oneDayTicketPr + $hotelPrice; 
} 

public function HaveRestWithOwnSkis($roomQuality) 
{ 
    $oneDayTicketPr = $SkiResortTicketSystem->BuyOneDayTicket(); 
    $hotelPrice = $HotelBookingSystem->BookRoom($roomQuality); 
    return $oneDayTicketPr + $hotelPrice; 
} 

public function PrintPrice() 
{ 
    echo $this->totalprice; 
} 

}; 

$rest = new SkiResortFacade(); 
var_dump($rest); 
$height = 181.5; 
$weight = 70.1; 
$feetSize = 45.2; 
$skierLevel = 1.2; 
$roomQuality = 3; 
$rest->HaveGoodRest($height, $weight, $feetSize, $skierLevel, $roomQuality); 
var_dump($rest); 
$rest->PrintPrice(); 
?> 
+0

請調整你的問題,否則將被關閉,這是不是一個真正的問題或目前尚不清楚你的要求...... – 2012-02-20 21:36:36

回答

0

您已經定義了$這個 - >在SkiResortFacade類SkiRent屬性:

$this->SkiRent = new SkiRent(); 

但你必須引用它沒有這個$:

$skiPrice = $SkiRent->RentSki($weight, $skierLevel); 

它應該是:

$skiPrice = $this->SkiRent->RentSki($weight, $skierLevel); 

這是一個工作代碼,所以你可以ñ比較woth您的版本:

<?php 
class SkiRent 
{ 
public function RentBoots($feetSize, $skierLevel) 
{ 
    return 20*$skierLevel*100/$feetSize; 
} 
public function RentSki($weight, $skierLevel) 
{ 
    return 40*$skierLevel*100/$weight; 
} 
public function RentPole($height) 
{ 
    return 5*$height/100; 
} 
}; 

class SkiResortTicketSystem 
{ 
public function BuyOneDayTicket() 
{ 
    return 115; 
} 
public function BuyHalfDayTicket() 
{ 
    return 60; 
} 
}; 

class HotelBookingSystem 
{ 
public function BookRoom($roomQuality) 
{ 
    switch ($roomQuality) 
    { 
     case 3: 
      return 250; 
     case 4: 
      return 500; 
     case 5: 
      return 900; 
     default: 
      throw new ArgumentException("roomQuality should be in [3;5]");  
    } 

    } 
}; 

class SkiResortFacade 
{ 
private $SkiRent; 
private $SkiResortTicketSystem; 
private $HotelBookingSystem; 
private $totalprice; 

function __construct() 
{ 
    $this->SkiRent = new SkiRent(); 
    $this->SkiResortTicketSystem = new SkiResortTicketSystem(); 
    $this->HotelBookingSystem = new HotelBookingSystem(); 
} 

function HaveGoodRest($height, $weight, $feetSize, $skierLevel, $roomQuality) 
{ 
    $skiPrice = $this->SkiRent->RentSki($weight, $skierLevel); 
    var_dump($skiPrice); 
    $skiBootsPrice = $this->SkiRent->RentBoots($feetSize,$skierLevel); 
    $polePrice = $this->SkiRent->RentPole($height); 
    $oneDayTicketPr = $this->SkiResortTicketSystem->BuyOneDayTicket(); 
    $hotelPrice = $this->HotelBookingSystem->BookRoom($roomQuality); 

    $this->totalprice = $skiPrice + $skiBootsPrice + $polePrice + $oneDayTicketPr + $hotelPrice; 
} 

public function HaveRestWithOwnSkis($roomQuality) 
{ 
    $oneDayTicketPr = $SkiResortTicketSystem->BuyOneDayTicket(); 
    $hotelPrice = $HotelBookingSystem->BookRoom($roomQuality); 
    return $oneDayTicketPr + $hotelPrice; 
} 

public function PrintPrice() 
{ 
    echo $this->totalprice; 
} 

}; 

$rest = new SkiResortFacade(); 
$height = 181.5; 
$weight = 70.1; 
$feetSize = 45.2; 
$skierLevel = 1.2; 
$roomQuality = 3; 
$rest->HaveGoodRest($height, $weight, $feetSize, $skierLevel, $roomQuality); 
$rest->PrintPrice(); 
2

致命錯誤:調用一個成員函數RentSki()非物體上線65

$skiPrice = $SkiRent->RentSki($weight, $skierLevel); // Line 65 

$SkiRent ISN」 t一個對象,因爲您沒有實例化它或將其作爲參數傳入HaveGoodRest()方法

您有多次調用您的代碼中的非對象的行爲。

+0

謝謝你這麼多,這有助於。對不起,這個愚蠢的問題。 – levjke 2012-02-20 21:50:29