一時変数を取り除く
今回は、一時変数をどうにかしていきます。
リファクタリング前のコード
<?php namespace App; class Customer { ~省略~ public function statement() { $totalAmount = 0; $frequentRenterPoint = 0; $result = 'Rental Point for ' . $this->getName() . "\n"; foreach ($this->rental as $rental) { $thisAmount = $rental->getCharge(); // レンタルポイントを加算する $frequentRenterPoint++; // 新作を2日以上借りた場合は、ボーナスポイント if (($rental->getMovie()->getPriceCode() === Movie::NEW_RELEASE) && $rental->getDaysRented() > 1) { $frequentRenterPoint++; } // 貸し出しに関する数値の表示 $result .= "\t" . $rental->getMovie()->getTitle() . "\t" . $thisAmount . "\n"; $totalAmount += $thisAmount; } $result .= 'Amount owed is ' . $totalAmount . "\n"; $result .= 'You earned ' . $frequentRenterPoint . ' frequent renter points' . "\n"; return $result; } }
$thisAmount = $rental->getCharge();
が一時変数
$result .= "\t" . $rental->getMovie()->getTitle() . "\t" . $thisAmount . "\n";
に使われていますが、直接代入したほうが記述量が減ります。
一時変数に代入せずに直接代入
<?php namespace App; class Customer { ~省略~ public function statement() { $totalAmount = 0; $frequentRenterPoint = 0; $result = 'Rental Point for ' . $this->getName() . "\n"; foreach ($this->rentals as $rental) { $frequentRenterPoint++; if (($rental->getMovie()->getPriceCode() === Movie::NEW_RELEASE) && $rental->getDaysRented() > 1) { $frequentRenterPoint++; } // 貸し出しに関する数値の表示 $result .= "\t" . $rental->getMovie()->getTitle() . "\t" . $rental->getCharge() . "\n"; $totalAmount += $rental->getCharge(); } $result .= 'Amount owed is ' . $totalAmount . "\n"; $result .= 'You earned ' . $frequentRenterPoint . ' frequent renter points' . "\n"; return $result; } }