最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

php設(shè)計(jì)模式介紹之值對(duì)象模式第4/5頁

 更新時(shí)間:2008年04月13日 22:10:17   作者:  
在所有的最簡單的程序中,大多數(shù)對(duì)象都有一個(gè)標(biāo)識(shí),一個(gè)重要的商業(yè)應(yīng)用對(duì)象,例如一個(gè)Customer或者一個(gè)SKU,有一個(gè)或者更多的屬性---id,name,email地址,這樣可以把它從同一個(gè)類的其他實(shí)例區(qū)分開來。此外,對(duì)象有一個(gè)恒定的標(biāo)識(shí):它是貫穿于整個(gè)應(yīng)用程序的一個(gè)唯一的標(biāo)識(shí),對(duì)于程序員來說,”customer A”在任何地方就是”customer A”,并且只要你的程序在持續(xù)運(yùn)行時(shí)"customer A"仍然是"customer A"。 但是一個(gè)對(duì)象不需要有一個(gè)標(biāo)識(shí)。有些對(duì)象僅僅是為了描述其他對(duì)象的屬性。

另一個(gè)重要的概念是對(duì)象Monopoly中的租金支付。讓我們首先寫一個(gè)測試實(shí)例(測試引導(dǎo)開發(fā))。下面的代碼希望用來實(shí)現(xiàn)既定的目標(biāo)。

function TestRent() {
$game = new Monopoly;
$player1 = new Player(‘Madeline');
$player2 = new Player(‘Caleb');
$this->assertEqual(1500, $player1->getBalance());
$this->assertEqual(1500, $player2->getBalance());
$game->payRent($player1, $player2, new Dollar(26));
$this->assertEqual(1474, $player1->getBalance());
$this->assertEqual(1526, $player2->getBalance());
}
根據(jù)這個(gè)測試代碼,我們需要在Monopoly對(duì)象中增加payRent()的方法函數(shù)來實(shí)現(xiàn)一個(gè)Player對(duì)象去支付租金給另一個(gè)Player對(duì)象.

Class Monopoly {
// ...
/**
* pay rent from one player to another
* @param Player $from the player paying rent
* @param Player $to the player collecting rent
* @param Dollar $rent the amount of the rent
* @return void
*/
public function payRent($from, $to, $rent) {
$to->collect($from->pay($rent));
}
}
payRent()方法函數(shù)實(shí)現(xiàn)了兩個(gè)player對(duì)象之間($from和$to)的租金支付。方法函數(shù)Player::collect()已經(jīng)被定義了,但是Player::pay()必須被添加進(jìn)去,以便實(shí)例$from通過pay()方法支付一定的Dollar數(shù)額$to對(duì)象中。首先我們定義Player::pay()為:

class Player {
// ...
public function pay($amount) {
$this->savings = $this->savings->add(-1 * $amount);
}
}
但是,我們發(fā)現(xiàn)在PHP中你不能用一個(gè)數(shù)字乘以一個(gè)對(duì)象(不像其他語言,PHP不允許重載操作符,以便構(gòu)造函數(shù)進(jìn)行運(yùn)算)。所以,我們通過添加一個(gè)debit()方法函數(shù)實(shí)現(xiàn)Dollar對(duì)象的減的操作。

class Dollar {
protected $amount;
public function __construct($amount=0) {
$this->amount = (float)$amount;
}
public function getAmount() {
return $this->amount;
}
public function add($dollar) {
return new Dollar($this->amount + $dollar->getAmount());
}
public function debit($dollar) {
return new Dollar($this->amount - $dollar->getAmount());
}
}
引入Dollar::debit()后,Player::pay()函數(shù)的操作依然是很簡單的。

class Player {
// ...
/**
* make a payment
* @param Dollar $amount the amount to pay
* @return Dollar the amount payed
*/
public function pay($amount) {
$this->savings = $this->savings->debit($amount);
return $amount;
}
}
Player::pay()方法返回支付金額的$amount對(duì)象,所以Monopoly::payRent()中的語句$to->collect($from->pay($rent))的用法是沒有問題的。這樣做的話,如果將來你添加新的“商業(yè)邏輯”用來限制一個(gè)player不能支付比他現(xiàn)有的余額還多得金額。(在這種情況下,將返回與player的賬戶余額相同的數(shù)值。同時(shí),也可以調(diào)用一個(gè)“破產(chǎn)異常處理”來計(jì)算不足的金額,并進(jìn)行相關(guān)處理。對(duì)象$to仍然從對(duì)象$from中取得$from能夠給予的金額。)

注:術(shù)語------商業(yè)邏輯

在一個(gè)游戲平臺(tái)的例子上提及的“商業(yè)邏輯”似乎無法理解。這里的商業(yè)的意思并不是指正常公司的商業(yè)運(yùn)作,而是指因?yàn)樘厥鈶?yīng)用領(lǐng)域需要的概念。請(qǐng)把它認(rèn)知為 “一個(gè)直接的任務(wù)或目標(biāo)”,而不是“這里面存在的商業(yè)操作”。

所以,既然目前我們討論的是一個(gè)Monopoly,那么這里的 “商業(yè)邏輯”蘊(yùn)含的意思就是針對(duì)一個(gè)游戲的規(guī)則而說的。

相關(guān)文章

  • 8個(gè)PHP數(shù)組面試題

    8個(gè)PHP數(shù)組面試題

    這篇文章主要介紹了8個(gè)PHP數(shù)組面試題,例如寫函數(shù)創(chuàng)建長度為10的數(shù)組,數(shù)組中的元素為遞增的奇數(shù),首項(xiàng)為1、創(chuàng)建長度為10的數(shù)組,數(shù)組中的數(shù)為遞增的等比數(shù),比值為3,首項(xiàng)為等題目,需要的朋友可以參考下
    2015-06-06
  • PHP中session使用方法詳解

    PHP中session使用方法詳解

    在PHP開發(fā)中對(duì)比起Cookie,session 是存儲(chǔ)在服務(wù)器端的會(huì)話,相對(duì)安全,并且不像 Cookie 那樣有存儲(chǔ)長度限制,本文簡單介紹 session 的使用
    2007-03-03
  • PHP運(yùn)行SVN命令顯示某用戶的文件更新記錄的代碼

    PHP運(yùn)行SVN命令顯示某用戶的文件更新記錄的代碼

    使用SVN開發(fā)者們平時(shí)開發(fā)或代碼上線過程中需要知道某個(gè)時(shí)間段內(nèi)修改或添加過那些文件,所以用PHP寫了個(gè)小程序,直接在瀏覽器中調(diào)用即可
    2014-01-01
  • 淺談PHP中Stream(流)

    淺談PHP中Stream(流)

    Stream是PHP開發(fā)里最容易被忽視的函數(shù)系列(SPL系列,Stream系列,pack函數(shù),封裝協(xié)議)之一,但其是個(gè)很有用也很重要的函數(shù)。Stream可以翻譯為“流”,在Java里,流是一個(gè)很重要的概念。
    2015-06-06
  • php日志函數(shù)error_log用法實(shí)例分析

    php日志函數(shù)error_log用法實(shí)例分析

    這篇文章主要介紹了php日志函數(shù)error_log用法,結(jié)合實(shí)例形式分析了php日志函數(shù)error_log相關(guān)的配置文件設(shè)置、函數(shù)功能、用法與使用注意事項(xiàng),需要的朋友可以參考下
    2019-09-09
  • 網(wǎng)站用php實(shí)現(xiàn)paypal整合方法

    網(wǎng)站用php實(shí)現(xiàn)paypal整合方法

    雖然在中國paypal不是很流行,但如果把范圍擴(kuò)大到世界的話,那paypal無疑就是老大了。
    2010-11-11
  • 微信公眾號(hào)點(diǎn)擊菜單即可打開并登錄微站的實(shí)現(xiàn)方法

    微信公眾號(hào)點(diǎn)擊菜單即可打開并登錄微站的實(shí)現(xiàn)方法

    這篇文章主要介紹了微信公眾號(hào)點(diǎn)擊菜單即可打開并登錄微站的實(shí)現(xiàn)方法,以實(shí)例形式對(duì)回調(diào)、菜單及參數(shù)的處理等具體實(shí)現(xiàn)步驟與功能代碼都做了較為詳細(xì)的描述,對(duì)于微信公眾號(hào)的開發(fā)來說具有很好的參考借鑒價(jià)值,需要的朋友可以參考下
    2014-11-11
  • php操作sqlserver關(guān)于時(shí)間日期讀取的小小見解

    php操作sqlserver關(guān)于時(shí)間日期讀取的小小見解

    以前一直在用mysql對(duì)sqlserver不是很熟悉,于是摸著石頭過河。沒有別的至少mysql和sqlserver還算是親戚 做條件查詢的時(shí)候。出現(xiàn)了問題
    2009-11-11
  • Php獲取金書網(wǎng)的書名的實(shí)現(xiàn)代碼

    Php獲取金書網(wǎng)的書名的實(shí)現(xiàn)代碼

    php獲取金書網(wǎng)的書名的實(shí)現(xiàn)代碼。
    2010-06-06
  • 兼容PHP5的PHP目錄管理函數(shù)庫

    兼容PHP5的PHP目錄管理函數(shù)庫

    php下進(jìn)行目錄的一些操作,經(jīng)常用到的方法
    2008-07-07

最新評(píng)論

岐山县| 新巴尔虎左旗| 昌黎县| 类乌齐县| 土默特右旗| 开平市| 南投市| 稻城县| 内黄县| 溧水县| 通渭县| 龙泉市| 高清| 桐柏县| 昌都县| 化州市| 孙吴县| 麻江县| 额尔古纳市| 西昌市| 介休市| 分宜县| 陕西省| 康保县| 五常市| 田阳县| 乌鲁木齐县| 华蓥市| 卢龙县| 长海县| 威海市| 秦安县| 博客| 孟连| 嘉善县| 北票市| 抚松县| 方正县| 偏关县| SHOW| 张家口市|