/* * * @param $dayOfWeek * @return int Day of week, with 1 being Monday and so on. */ function findNextBusinessDay($dayOfWeek) { $nextBusinessDay = $dayOfWeek;
switch($dayOfWeek) { case FRIDAY: case SATURDAY: case SUNDAY: $nextBusinessDay = MONDAY; break; default: $nextBusinessDay += 1; break; }
public function __construct($sev, $msg) { $this- severity = $sev; $this- message = $msg; }
public function getSeverity() { return $this- severity; }
public function setSeverity($severity) { $this- severity = $severity; }
public function getMessage() { return $this- message; }
public function setMessage($msg) { $this- message = $msg; } }
function cntMsgs($messages) { $n = 0; /* iterate through the messages... */ foreach($messages as $m) { if ($m- getSeverity() == 'Error') { $n++; // add one to the result; } } return $n; }
$messages = array(new ResultMessage( Error , This is an error! ), new ResultMessage( Warning , This is a warning! ), new ResultMessage( Error , This is another error! ));
$errs = cntMsgs($messages);
echo( There are . $errs . errors in the result./n
?
好習慣: 注釋函數和類例6里的注釋標明了類和函數的意圖。注釋表明方法做了什么和為什么做,這會對將來了解代碼的意圖很有幫助。環境的變化會需要你進行代碼修改,這就會讓很容易的知道開始時你代碼是做什么的。例6.好習慣:注釋函數和類 ?php /** * The ResultMessage class holds a message that can be returned * as a result of a process. The message has a severity and * message. * * @author nagood * */ class ResultMessage { private $severity; private $message;
/** * Constructor for the ResultMessage that allows you to assign * severity and message. * @param $sev See {@link getSeverity()} * @param $msg * @return unknown_type */ public function __construct($sev, $msg) { $this- severity = $sev; $this- message = $msg; }
/** * Returns the severity of the message. Should be one * Information , Warning , or Error . * @return string Message severity */ public function getSeverity() { return $this- severity; }
/** * Sets the severity of the message * @param $severity * @return void */ public function setSeverity($severity) { $this- severity = $severity; }
public function getMessage() { return $this- message; }
public function setMessage($msg) { $this- message = $msg; } }
/* * Counts the messages with the given severity in the array * of messages. * * @param $messages An array of ResultMessage * @return int Count of messages with a severity of Error */ function countErrors($messages) { $matchingCount = 0; foreach($messages as $m) { if ($m- getSeverity() == Error ) { $matchingCount++; } } return $matchingCount; }
$messages = array(new ResultMessage( Error , This is an error! ), new ResultMessage( Warning , This is a warning! ), new ResultMessage( Error , This is another error! ));
// Get the actual name of the function convertDayOfWeekToName($day) { $dayNames = array( Sunday , Monday , Tuesday , Wednesday , Thursday , Friday , Saturday return $dayNames[$day]; }
echo( The name of the 0 day is: . convertDayOfWeekToName(0) . /n echo( The name of the 10 day is: . convertDayOfWeekToName(10) . /n echo( The name of the 'orange' day is: . convertDayOfWeekToName('orange') . /n
/** * This is the exception thrown if the day of the week is invalid. * @author nagood * */ class InvalidDayOfWeekException extends Exception { }
class InvalidDayFormatException extends Exception { }
/** * Gets the name of the day given the day in the week. Will * return an error if the value supplied is out of range. * * @param $day * @return unknown_type */ function convertDayOfWeekToName($day) { if (! is_numeric($day)) { throw new InvalidDayFormatException('The value /'' . $day . '/' is an ' . 'invalid format for a day of week.'); }
if (($day 6) || ($day 0)) { throw new InvalidDayOfWeekException('The day number /'' . $day . '/' is an ' . 'invalid day of the week. Expecting 0-6.'); }
echo( The name of the 0 day is: . convertDayOfWeekToName(0) . /n
try { echo( The name of the 10 day is: . convertDayOfWeekToName(10) . /n } catch (InvalidDayOfWeekException $e) { echo ( Encountered error while trying to convert value: . $e- getMessage() . /n }
try { echo( The name of the 'orange' day is: . convertDayOfWeekToName('orange') . /n } catch (InvalidDayFormatException $e) { echo ( Encountered error while trying to convert value: . $e- getMessage() . /n }
?
通過檢驗參數的全法性 這有助于他人使用你需要正確參數的函數 你應該檢驗它們并拋出異常的大意: 盡量拋出接近錯誤的異常. 處理每個特殊的異常. 永遠,永遠不要復制粘貼把代碼復制到你的編輯里的能力是一把雙刃劍。一方面,它避免了你參照一些示例后重新再打一遍時出現的錯誤;另一方面,它讓書寫相似代碼太簡單了。你要避免在你的程序應用中復制粘貼代碼。當你發現自己在這樣做時,停下來并問自己可不可以把復制的部分重復使用。把相同的代碼放在同一個地方可以讓你以后修改時更加的輕松,因為要改變都在一起。壞習慣:相似的代碼塊例9表現了除了一些值所在位置之外很相近的幾個方法。有些工具可以檢驗你的代碼中復制粘貼的部分(去看看Resources)。例9.相似的代碼塊 ?php /** * Counts the number of messages found in the array of * ResultMessage with the getSeverity() value of Error * * @param $messages An array of ResultMessage * @return unknown_type */ function countErrors($messages) { $matchingCount = 0; foreach($messages as $m) { if ($m- getSeverity() == Error ) { $matchingCount++; } } return $matchingCount; }
/** * Counts the number of messages found in the array of * ResultMessage with the getSeverity() value of Warning * * @param $messages An array of ResultMessage * @return unknown_type */ function countWarnings($messages) { $matchingCount = 0; foreach($messages as $m) { if ($m- getSeverity() == Warning ) { $matchingCount++; } } return $matchingCount; }
/** * Counts the number of messages found in the array of * ResultMessage with the getSeverity() value of Information * * @param $messages An array of ResultMessage * @return unknown_type */ function countInformation($messages) { $matchingCount = 0; foreach($messages as $m) { if ($m- getSeverity() == Information ) { $matchingCount++; } } return $matchingCount; }
$messages = array(new ResultMessage( Error , This is an error! ), new ResultMessage( Warning , This is a warning! ), new ResultMessage( Error , This is another error! ));
$errs = countErrors($messages);
echo( There are . $errs . errors in the result./n ?
好習慣:可復用的帶參函數例10展示了把要復制的代碼入到一個方法中的代碼修改。另一個修改的方法則把工作代理給了一個新的方法 。編寫一個通用的方法要花一些時間來設計,當然這會讓你停下來思考,而不是用復制粘貼的組合快捷鍵。但是這樣做會在以后修改時省回第一次多花的時間。例10.好習慣 :可利用的帶參函數 ?php /* * Counts the messages with the given severity in the array * of messages. * * @param $messages An array of ResultMessage * @return int Count of messages matching $withSeverity */ function countMessages($messages, $withSeverity) { $matchingCount = 0; foreach($messages as $m) { if ($m- getSeverity() == $withSeverity) { $matchingCount++; } } return $matchingCount; }
/** * Counts the number of messages found in the array of * ResultMessage with the getSeverity() value of Error * * @param $messages An array of ResultMessage * @return unknown_type */ function countErrors($messages) { return countMessages($messages, Errors }
/** * Counts the number of messages found in the array of * ResultMessage with the getSeverity() value of Warning * * @param $messages An array of ResultMessage * @return unknown_type */ function countWarnings($messages) { return countMessages($messages, Warning }
/** * Counts the number of messages found in the array of * ResultMessage with the getSeverity() value of Warning * * @param $messages An array of ResultMessage * @return unknown_type */ function countInformation($messages) { return countMessages($messages, Information }
$messages = array(new ResultMessage( Error , This is an error! ), new ResultMessage( Warning , This is a warning! ), new ResultMessage( Error , This is another error! ));