高级PHP V5 对象研究

时间:2010-01-14 09:52:59   来源:第二电脑网  作者:第二电脑网

  第二电脑网导读:象类型和类型提示的优点。一个类定义一种类型。从该类实例化的任何对象属于该类定义的类型。所以,使用 Car 类创建 Car 对象。如果 Car 类继承 Vehicle 超类,则 Car 对象还将是一个 Vehicle 对象。这反映了我们在现实世界中分类事物的方法。但正如您将看到的,类型不仅仅是分类系统元素的有梅椒ā@嘈褪敲嫦蚨韵蟊喑痰幕。蛭嘈褪橇己靡恢碌男形谋VぁP矶嗌杓萍记衫醋愿帽Vぁ?...
  正文:

本文介绍了PHP V5一些更高级的面向设计的特性。其中包括各种对象类型,它们允许将系统中的组件相互分离,创建可重用、可扩展、可伸缩的代码
  
    领会暗示
  
    首先介绍一下对象类型和类型提示的优点。一个类定义一种类型。从该类实例化的任何对象属于该类定义的类型。所以,使用 Car 类创建 Car 对象。如果 Car 类继承 Vehicle 超类,则 Car 对象还将是一个 Vehicle 对象。这反映了我们在现实世界中分类事物的方法。但正如您将看到的,类型不仅仅是分类系统元素的有梅椒ā@嘈褪敲嫦蚨韵编程的基础,因为类型是良好一致的行为的保证。许多设计技巧来自该保证?BR>
    “开始了解 PHP V5 中的对象”展示对象为您保证了接口。当系统传递 Dictionary 对象时,您可以确定它具有 $translations 数组和 summarize() 方法。相反,关联数组不提供相同级别的确定性。要利用类提供的清晰接口,需要知道您的对象实际上是 Dictionary 的一个实例,而不是某个 imposter。可以用 instanceof 操作符来手动验证这一点,该操作符是 PHP V5 引入的介于对象实例和类名之间的一个便捷工具。
  
    $en instanceof Dictionary
  
    如果给定对象是给定类的实例,则 instanceof 操作符解析为真。在调用方法中第一次遇到 Dictionary 对象时,可以在使用它之前检查它的类型。
  
  if ( $en instanceof Dictionary ) {
   print $en->summarize();
  }
  
    但是,如果使用 PHP V5 的话,可以将对象类型检查构建到类或方法声明中。
  
    在“开始了解 PHP V5 中的对象”中,重点介绍两个类:Dictionary,它存储术语和翻译, DictionaryIO,它将 Dictionary 数据导出(导入)自(至)文件系统。这些特性使得将 Dictionary 文件发送到第三方翻译器变得容易,第三方翻译器可以使用自己的软件来编辑数据。然后,您可以重新导入已处理的文件。清单 1 是 Dictionary 类的一个版本,它接受一个 DictionaryIO 对象,并将其存储以备将来使用。
  
    清单 1. 接受 DictionaryIO 对象的 Dictionary 类的一个版本
  
  class Dictionary {
   public $translations = array();
   public $type ="En";
   public $dictio;
  
   function addDictionaryIO( $dictio ) {
    $this->dictio=$dictio;
   }
  
   function export() {
    if ( $this->dictio ) {
     $this->dictio->export( $this );
    }
   }
  }
  
  class DictionaryIO {
   function export( $dict ) {
    print "exporting dictionary data "."($dict->type)n";
   }
  }
  
  $en = new Dictionary();
  $en->addDictionaryIO( new DictionaryIO() );
  $en->export();
  
  // output:
  // dumping dictionary data (En)
  
    DictionaryIO 类具有单个方法 export(),它接受一个 Dictionary 对象,并使用它来输出假消息。现在,Dictionary 具有两个新方法:addDictionaryIO(),接受并存储 DictionaryIO 对象; export(),使用已提供的对象导出 Dictionary 数据 —— 或者是在完全实现的版本中。
  
    您可能会疑惑为什么 Dictionary 对象不仅实例化自己的 DictionaryIO 对象,或者甚至在内部处理导入导出操作,而根本不求助于第二个对象。一个原因是您可能希望一个 DictionaryIO 对象使用多个 Dictionary 对象,或者希望存储该对象的单独引用。另一个原因是通过将 DictionaryIO 对象传递给 Dictionary,可以利用类切换或 多态性。换句话说,可以将 DictionaryIO 子类(比如 XMLDictionaryIO)的实例传递给 Dictionary,并更改运行时保存和检索数据的方法。
  [img]http://image.21tx.com/image/20050921/12845.jpg[img]
  正如所显示的,没有什么阻止编码器将完全随机的对象传递给 addDictionaryIO()。只有在运行 export() 时,才会获得一个类似的错误,并发现已经存储在 $dictio 中的对象实际上并没有 export() 方法。使用 PHP V4 时,必须测试本例中的参数类型,以绝对确保编码器传递类型正确的对象。使用 PHP V5 时,可以部署参数提示来强制对象类型。只将所需的对象类型添加到方法声明的参数变量中,如清单 2 所示:
来源:http://www.002pc.com/master/College/Programming/PHP/11825.html

 1/5    1 2 3 4 5 下一页 尾页
收藏到:

关于《高级PHP V5 对象研究》文章的评论

共有 0 位网友发表了评论 此处只显示部分留言 点击查看完整评论页面

随机文章

    SQL Error: select * from ***_ecms_article where classid='86' and checked=1 order by rand() limit 10

顶出来的热门

    SQL Error: select * from ***_ecms_article where classid='86' and checked=1 order by diggtop desc,id desc limit 10
站内搜索: 高级搜索

热门搜索: Windows style 系统 tr IP QQ CPU 安装 function 注册 if td