php教程:php设计模式介绍之值对象模式(2)_PHP技巧_黑客防线网安服务器维护基地--Powered by WWW.RONGSEN.COM.CN

php教程:php设计模式介绍之值对象模式(2)

作者:黑客防线网安PHP教程基地 来源:黑客防线网安PHP教程基地 浏览次数:0

本篇关键词:模式对象教程介绍
黑客防线网安网讯:  WebjxCom提示:php教程:php设计模式介绍之值对象模式.    问题:    那么,你该如何为Date或Dollar这样一些描述简单的应用定义一个高效的类,并且易于创建呢。    解决方案...
  WebjxCom提示:php教程:php设计模式介绍之值对象模式.
  
  问题:
  
  那么你该如何为Date或Dollar这样一些描述简单的应用定义一个高效的类并且易于创建呢
  
  解决方案:
  
  高效的对象应该像PHP的整型那样运作:如果你把同一个对象资源赋值给两个不同的变量,然后改变其中的一个变量,另一个变量仍然不受影响事实上,这就是ValueObject模式的目标所在。
  
  执行ValueObject时,php4和php5是有区别的。
  
  正如以上你所看到的,PHP5通过new进行对象资源的赋值传递的是对象资源的指针就像我们在PHP4中通过指针传递一样。很明显,这是一个问题。为了解决那个问题并实现一个专有对象Dollar的值,我们必须使属性$amount的对象的所有属性的一个值在一般情况下不可变或不能改变。但是在PHP语言的没有提供参数不可改变的功能的情况下,你完全可以结合属性的可见性与获得和设置方法来实现。
  
  相反地,PHP4操作所有的对象都是遵循ValueObjects对象规律的,因为PHP4的赋值操作相当于对对象做了一个拷贝。所以为了在PHP4中实现ValueObjects设计模式你需要打破你细心地培养的通过指针赋值来创建、传递、提取对象的习惯。
  
  注:术语不可变的(Immutable):
  
  在词典中Immutable的定义是不允许或不易受影响。在编程中,这个术语表示一个一旦被设置就不能改变的值。
  
  PHP5样本代码:
  
  既然我们开始用PHP5编写代码,让我们优化一个PHP5的ValueObject的实例并创建一个较好的Dollar类定义。命名在面向对象编程中非常重要,选择一个唯一的货币类型作为这个类的名字,说明它不被定义为可以处理多种货币类型的类。
  
  classDollar{
  
  protected$amount;
  
  publicfunction__construct($amount=0){
  
  $this->amount=(float)$amount;
  
  }
  
  publicfunctiongetAmount(){
  
  return$this->amount;
  
  }
  
  publicfunctionadd($dollar){
  
  returnnewDollar($this->amount+$dollar->getAmount());
  
  }
  
  }
  
  类里面的属性如果加上protected前缀,别的类是访问不了的。protected(和private)拒绝通过属性直接被访问。
  
  通常,当你使用面向对象进行编程的时候,你经常需要创建了一个“setter”函数,就类似于:
  
  publicsetAmount($amount)
  
  {
  
  $this->amount=$amount;
  
  }
  
  一样,在这种情况下,虽然没有设定函数Dollar::amount(),但在对象的实例化期时,参数Dollar::amount就已经被赋值了。而函数Dollar::getAmount()只是提供一个访问Dollar属性的功能,在这里访问的数据类型为浮点型。
  
  最有趣的变化是在Dollar::add()方法函数中。并不是直接改变$this->amount变量的值从而会改变已存在的Dollar对象实例,而是创建并返回一个新的Dollar实例。现在,尽管你指定当前对象给多个变量,但是每一个变量的变化都不会影响其它的变量实例。
  
  对于价值设计模式不变性是关键,任何对于一个ValueObject的变量amount的改变,是通过创建一个新的带有不同预期值的类的实例来完成的。上文中提高的最初那个$this->amount变量的值从未改变。
  
  简单来说,在PHP5里面使用价值设计模式时,需要注意以下几个方面:
  
  保护值对象的属性,禁止被直接访问。
  
  在构造函数中就对属性进行赋值。
  
  去掉任何一个会改变属性值的方式函数(setter),否则属性值很容易被改变。
  
  以上三步创建了一个不变的值,这个值一旦被初始化设置之后就不能被改变。当然,你也应该提供一个查看函数或者是访问ValueObject的属性的方法,并且可以添加一些与这个类相关的函数。值对象并不是只能用在一个简单的架构上,它也可以实现重要的商务逻辑应用。让我们看看下一个例子:
  
  
    黑客防线网安服务器维护方案本篇连接:http://www.rongsen.com.cn/show-17380-1.html
网站维护教程更新时间:2012-09-21 05:17:51  【打印此页】  【关闭
我要申请本站N点 | 黑客防线官网 |  
专业服务器维护及网站维护手工安全搭建环境,网站安全加固服务。黑客防线网安服务器维护基地招商进行中!QQ:29769479

footer  footer  footer  footer