2012-02-20 1 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

これは助け、 –

答えて

0

あなたはSkiResortFacadeクラス内の$ this - > SkiRent属性定義されています:

$this->SkiRent = new SkiRent(); 

をしかし、あなたは$これなしでそれを参照しています

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

それは次のようになります。

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

これは動作するコードなので、ca Nバージョン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」 あなたは私を助けることができる場合、私は疑問に思う、ここのコードですHaveGoodRest()メソッドのインスタンスとしてインスタンス化していないか引数を渡していないためにオブジェクト

コード内で非オブジェクトが複数回呼び出されました。

+0

はどうもありがとうございました...それは本当に問題ではないか、あなたが求めているものは明らかではない、あなたの質問を再構築するかが閉じられますしてください。そんなばかげた質問には申し訳ありません。 – levjke