欧美日韩精品在线,国内精品久久久久久久久,一级毛片恃级毛片直播,清纯唯美亚洲综合欧美色

《PHP設(shè)計(jì)模式介紹》第二章 值對(duì)象模式(3)_PHP教程

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

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

詳細(xì)例子

讓我們?cè)谝幌赂訌?fù)雜的例子中查看值對(duì)象模式的功能。

讓我們開(kāi)始實(shí)現(xiàn)一個(gè)的基于PHP5中Dollar類(lèi)中的一個(gè)Monopoly游戲。

第一個(gè)類(lèi)Monopoly的框架如下:

class Monopoly {
protected $go_amount;
/**
* game constructor
* @return void
*/
public function __construct() {
$this->go_amount = new Dollar(200);
}
/**
* pay a player for passing 揋o?/span>
* @param Player $player the player to pay
* @return void
*/
public function passGo($player) {
$player->collect($this->go_amount);
}
}

目前,Monopoly的功能比較簡(jiǎn)單。構(gòu)造器創(chuàng)建一個(gè)Dollar類(lèi)的實(shí)例$go_amount,設(shè)定為200,實(shí)例go_amount常常被passtGo()函數(shù)調(diào)用,它帶著一個(gè)player參數(shù),并讓對(duì)象player的函數(shù)collect為player機(jī)上200美元.

Player類(lèi)的聲明請(qǐng)看下面代碼,Monoplay類(lèi)調(diào)用帶一個(gè)Dollar參數(shù)的Player::collect()方法。然后把Dollar的數(shù)值加到Player的現(xiàn)金余額上。另外,通過(guò)判斷Player::getBalance()方法函數(shù)返回來(lái)的余額,我們可以知道使訪問(wèn)當(dāng)前Player和Monopoly對(duì)象實(shí)例是否在工作中。

class Player {
protected $name;
protected $savings;
/**
* constructor
* set name and initial balance
* @param string $name the players name
* @return void
*/
public function __construct($name) {
$this->name = $name;
$this->savings = new Dollar(1500);
}
/**
* receive a payment
* @param Dollar $amount the amount received
* @return void
*/
public function collect($amount) {
$this->savings = $this->savings->add($amount);
}
* return player balance
* @return float
*/
public function getBalance() {
return $this->savings->getAmount();
}
}

上邊已經(jīng)給出了一個(gè)Monopoly和Player類(lèi),你現(xiàn)在可以根據(jù)目前聲明的幾個(gè)類(lèi)定義進(jìn)行一些測(cè)試了。

MonopolyTestCase的一個(gè)測(cè)試實(shí)例可以像下面這樣寫(xiě):

class MonopolyTestCase extends UnitTestCase {
function TestGame() {
$game = new Monopoly;
$player1 = new Player(‘Jason’);
$this->assertEqual(1500, $player1->getBalance());
$game->passGo($player1);
$this->assertEqual(1700, $player1->getBalance());
$game->passGo($player1);
$this->assertEqual(1900, $player1->getBalance());
}
}

如果你運(yùn)行MonopolyTestCase這個(gè)測(cè)試代碼,代碼的運(yùn)行是沒(méi)有問(wèn)題的。現(xiàn)在可以添加一些新的功能。

分享:《PHP設(shè)計(jì)模式介紹》導(dǎo)言
當(dāng)你在不斷的試圖從你的應(yīng)用程序中發(fā)現(xiàn)新的特征時(shí),你是否發(fā)現(xiàn)你提出的解決方法和一些以前你已經(jīng)實(shí)現(xiàn)的東西是如此的類(lèi)似呢?如果你是一個(gè)程序員(即使你才 開(kāi)始很短的時(shí)間),你都可能回答&ldqu

來(lái)源:模板無(wú)憂(yōu)//所屬分類(lèi):PHP教程/更新時(shí)間:2008-08-22
相關(guān)PHP教程