- 1、本文档共10页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
php教程php设计模式介绍之值对象模式选编
php教程 php设计模式介绍之值对象模式
在所有的最简单的程序中,大多数对象都有一个标识,一个重要的商业应用对象,例如一个Customer或者一个SKU,有一个或者更多的属性---id,name,email地址,这样可以把它从同一个类的其他实例区分开来。此外,对象有一个恒定的标识:它是贯穿于整个应用程序的一个唯一的标识,对于程序员来说,”customer A”在任何地方就是”customer A”,并且只要你的程序在持续运行时customer A仍然是customer A。 但是一个对象不需要有一个标识。有些对象仅仅是为了描述其他对象的属性。
例如:通常用一个对象描述一个日期、一个数字或者货币。日期、整数或美元的类定义是都是便于使用的、快捷、便于封装的,并且方便进行拷贝,相互比较,甚至是创建。
从表面上看,这些描述简单的对象很容易被执行:它们的语句非常少,在构造类时无论是应用于Customer还是SKU都没有什么不同。这个想法似乎是正确的,但是所谓的似乎正确很容易产生一些bug。
请看下面的代码,这是一个关于以美元给员工发放工资的对象的定义和执行操作。多数情况下,它的运行是没有问题的。(这个类被命名为BadDollar,因为它还存在着bug)。考虑一下,看你是否能发现它的bug。
// PHP5
class BadDollar {
protected $amount;
public function __construct($amount=0) {
$this-amount = (float)$amount;
}
public function getAmount() {
return $this-amount;
}
public function add($dollar) {
$this-amount += $dollar-getAmount();
}
}
class Work {
protected $salary;public function __construct() {
$this-salary = new BadDollar(200);}
public function payDay() {
return $this-salary;
}
}
class Person {
public $wallet;
}
function testBadDollarWorking() {
$job = new Work;
$p1 = new Person;
$p2 = new Person;
$p1-wallet = $job-payDay();
$this-assertEqual(200, $p1-wallet-getAmount());
$p2-wallet = $job-payDay();
$this-assertEqual(200, $p2-wallet-getAmount());
$p1-wallet-add($job-payDay());
$this-assertEqual(400, $p1-wallet-getAmount());
//this is bad — actually 400
$this-assertEqual(200, $p2-wallet-getAmount());
//this is really bad — actually 400
$this-assertEqual(200, $job-payDay()-getAmount());
}
那么, bug是什么呢?如果不能上面的代码例子中直观地发现问题,这里有个提示:雇员对象$p1和对象$p2使用着同一个BadDollar对象实例。
首先,类Work和类Person的实例已经创建。那么,假设每一个雇员最初有一个空的电子钱包,雇员的电子钱包Person:wallet是通过Work::payDay()函数返回的对象资源变量赋值的,所以被设定为一个BadDollar类的对象实例。
还记得PHP5的对象赋值处理方式吗?因为PHP5的对象赋值的处理方式,所以$job::salary,、$p1::wallet和$p2::wallet这三个看上去不同的对象实例虽然使用着不同的“标识符”,但是事实上,它们全部都指定到同一个对象实例。
因此,接下来的发放工资的操作(PayDay表示发放工资的日子,这里表示发放工资的动作),使用$job-payDay()本来仅仅是想增加$P1的工资,却出乎意料地次给$P2也发放了。并且,这个动作还改变了工作的基本工资的额度。因此,最后两个值的检测报错。
Value Object PHP5 Unit Test
1) Equal expectation fails because [Integer: 200] differs from
您可能关注的文档
- PFC理论部分选编.docx
- PEQ项目介绍课件-2016.7.4选编.ppt
- PH-101操作说明书选编.doc
- PEP小学英语四年级上册Unit3-My-Friends选编.ppt
- phich选编.doc
- PH116-12激光选编.pptx
- PhoningHome选编.ppt
- phil--《多媒体技术应用》课件第1章-多媒体技术概述选编.ppt
- PhotoshopCS6从入门到精通笔记选编.docx
- Photoshop-CS6破解方法选编.doc
- 区委书记、市国资委党委领导班子2025年组织生活会对照“四个带头”含反面典型案例举一反三剖析方面检查材料【两篇文】.docx
- 局党组书记、市国资委党委领导班子2025年组织生活会对照“四个带头”含反面典型案例举一反三剖析方面个人检查材料2篇文.docx
- 市交通运输局局长2025年专题生活会对照“四个带头”含落实意识形态工作责任制方面个人对照检查发言提纲与检察院领导班子“四个带头”检查材料【2篇文】.docx
- 市投资促进局党支部书记2025年组织生活会对照“四个带头”个人对照检查发言材料与党组书记“四个带头”个人对照检查材料(内蒙古地区四个对照,反面典型案例检视剖析)【2篇文】.docx
- 市教育局党委副书记、市国资委党委领导班子2025年“四个带头”个人对照检查发言材料(上年度整改+个人事项+典型事例剖析)2篇文.docx
- 2025年专题生活会“四个带头”方面对照检视材料(问题+原因+措施+意识形态)与纪检委员专题生活会“四个带头”方面个人对照检查材料【2篇文】.docx
- 检察院领导班子2025年专题生活会对照“四个带头”检查材料与县司法局专题生活会党组书记个人对照“四个带头”对照检查材料(含反面典型案例全面剖析)2篇文.docx
- 市机关事务局党支部书记、局党组书记2025年组织生活会对照“四个带头”含反面典型案例举一反三剖析方面个人发言材料、检查材料【2篇文】.docx
- 2025年领导干部专题生活会“四个带头”对照检查材料与市审计局领导班子专题生活会“四个带头”含反面典型案例剖析对照检查材料2篇文.docx
- 2025年县司法局专题民主生活会班子围绕“4个带头”对照检查材料与反面典型案例回顾与剖析对照检查发言材料2篇文.docx
最近下载
- 2025年江西农业工程职业学院单招职业倾向性测试题库及答案一套.docx VIP
- 电气设计软件:EPLAN二次开发_(3).EPLAN宏编程与宏库管理.docx
- 2025年青岛港湾职业技术学院单招综合素质考试模拟试题及答案解析.docx
- 改装空客320cbt a320题库ata26防火.pdf VIP
- 名师工作室工作总结PPT.pptx
- 2025年学生金钥匙竞赛(江苏地区)小学个人初赛赛题及答案(word可编辑版.pdf VIP
- 2024中学生公益实践白皮书.pdf
- 新人教部编版八年级生物下册教学计划及进度表(4篇).pdf VIP
- 技术总监总监岗位面试题及答案 .pdf
- 人教PEP版小学四年级英语下册教学工作计划及进度安排表4套.docx
文档评论(0)