日韩天天综合网_野战两个奶头被亲到高潮_亚洲日韩欧美精品综合_av女人天堂污污污_视频一区**字幕无弹窗_国产亚洲欧美小视频_国内性爱精品在线免费视频_国产一级电影在线播放_日韩欧美内地福利_亚洲一二三不卡片区

《PHP設(shè)計(jì)模式介紹》第三章 工廠模式(4)_PHP教程

編輯Tag賺U幣
教程Tag:暫無Tag,歡迎添加,賺取U幣!

推薦:《PHP設(shè)計(jì)模式介紹》第二章 值對(duì)象模式
在所有的最簡(jiǎn)單的程序中,大多數(shù)對(duì)象都有一個(gè)標(biāo)識(shí),一個(gè)重要的商業(yè)應(yīng)用對(duì)象,例如一個(gè)Customer或者一個(gè)SKU,有一個(gè)或者更多的屬性---id,name,email地址,這樣可以把它從同一個(gè)類的其他實(shí)例區(qū)分開

所有這些測(cè)試Color類功能的行為都在正常和期望的環(huán)境下實(shí)現(xiàn)的。但是每一個(gè)設(shè)計(jì)精良的類都必須考慮邊界情況。例如, 被送入構(gòu)造器執(zhí)行的數(shù)值如果是負(fù)數(shù),或者大于255的數(shù)值,或者根本不是數(shù)值,結(jié)果會(huì)出現(xiàn)什么呢?一個(gè)好的類定義應(yīng)該適應(yīng)測(cè)試中的多種邊界情況。

function testColorBoundaries() {
$color =& new Color(-1);
$this->assertErrorPattern(‘/out.*0.*255/i’);
$color =& new Color(1111);
$this->assertErrorPattern(‘/out.*0.*255/i’);
}

注:assertErrorPattern
assertErrorPattern() 作用是:將產(chǎn)生的php錯(cuò)誤進(jìn)行正確的正則表達(dá)式匹配。如果這個(gè)錯(cuò)誤不匹配指定的模式, 將不通過測(cè)試。
在那些測(cè)試的基礎(chǔ)上,Color類將得到更進(jìn)一步改進(jìn):

class Color {
var $r=0;
var $g=0;
var $b=0;
function Color($red=0, $green=0, $blue=0) {
$red = (int)$red;
if ($red < 0 || $red > 255) {
trigger_error(“color ‘$color’ out of bounds, “
.”please specify a number between 0 and 255”);
}
$this->r = $red;
$green = (int)$green;
if ($green < 0 || $green > 255) {
trigger_error(“color ‘$color’ out of bounds, “
.”please specify a number between 0 and 255”);
}
$this->g = $green;
$blue = (int)$blue;
if ($blue < 0 || $blue > 255) {
trigger_error(“color ‘$color’ out of bounds, “
.”please specify a number between 0 and 255”);
}
$this->b = $blue;
}
function getRgb() {
return sprintf(‘#XXX’, $this->r, $this->g, $this->b);
}
}

這個(gè)代碼通過了測(cè)試, 但是這種 " 剪切和粘貼 " 的風(fēng)格有點(diǎn)使人厭倦。 在 TDD,一個(gè)經(jīng)驗(yàn)法則就是將編碼最簡(jiǎn)單的實(shí)現(xiàn),如果你兩次需要相同的代碼,可以將其改進(jìn),但不要復(fù)制代碼。 然而你往往需要三次或三次以上的一樣代碼。 因此我們可以提取一個(gè)方法即重構(gòu)實(shí)現(xiàn)這個(gè)工作。

注:重構(gòu) - 提取方法
當(dāng)你的代碼中有兩個(gè)或者兩個(gè)以上部分的代碼相似的時(shí)候, 可以將它們提取出來成為一個(gè)獨(dú)立的方法,并按它的用途命名。當(dāng)你的類的方法代碼中頻頻出現(xiàn)相同的成分,提取代碼作為一個(gè)方法是非常有用的。

class Color {
var $r=0;
var $g=0;
var $b=0;
function Color($red=0, $green=0, $blue=0) {
$this->r = $this->validateColor($red);
$this->g = $this->validateColor($green);
$this->b = $this->validateColor($blue);
}
function validateColor($color) {
$check = (int)$color;
if ($check < 0 || $check > 255) {
trigger_error(“color ‘$color’ out of bounds, “
.”please specify a number between 0 and 255”);
} else {
return $check;
}
}
function getRgb() {
return sprintf(‘#XXX’, $this->r, $this->g, $this->b);
}
}

分享:《PHP設(shè)計(jì)模式介紹》第一章 編程慣用法
學(xué)習(xí)一門新的語言意味著要采用新的慣用法。這章將介紹或者可能重新強(qiáng)調(diào)一些慣用法。你會(huì)發(fā)現(xiàn)這些慣用法在你要在代碼中實(shí)現(xiàn)設(shè)計(jì)模式時(shí)候是非常有用的。 在這里總結(jié)的許多編程慣用法都是很值得

來源:模板無憂//所屬分類:PHP教程/更新時(shí)間:2008-08-22
相關(guān)PHP教程