做暧暧网站在线,wordpress自适应手机修改,手机网页设计尺寸,dede 网站目录例如#xff1a;通常用一个对象描述一个日期、一个数字或者货币。日期、整数或美元的类定义是都是便于使用的、快捷、便于封装的#xff0c;并且方便进行拷贝#xff0c;相互比较#xff0c;甚至是创建。 从表面上看#xff0c;这些描述简单的对象很容易被执行#xff1a…例如通常用一个对象描述一个日期、一个数字或者货币。日期、整数或美元的类定义是都是便于使用的、快捷、便于封装的并且方便进行拷贝相互比较甚至是创建。 从表面上看这些描述简单的对象很容易被执行它们的语句非常少在构造类时无论是应用于Customer还是SKU都没有什么不同。这个想法似乎是正确的但是所谓的似乎正确很容易产生一些bug。 请看下面的代码这是一个关于以美元给员工发放工资的对象的定义和执行操作。多数情况下它的运行是没有问题的。(这个类被命名为BadDollar因为它还存在着bug)。考虑一下看你是否能发现它的bug。 // PHP5class BadDollar {protected $amount;public function __construct($amount0) {$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 Test1) Equal expectation fails because [Integer: 200] differs from [Float: 400] by 200in testBadDollarWorkingin ValueObjTestCase2) Equal expectation fails because [Integer: 200] differs from [Float: 400] by 200in testBadDollarWorkingin ValueObjTestCaseFAILURES!!!12345下一页阅读全文