软件频道>开发者网络>Web>ASPJSPPHPRuby专题教程|软件频道产品中心群乐相关下载Vista频道Ruby and Rails技术资源
您现在的位置: 天极网 > 开发频道 > web开发 > 高级PHP V5 对象研究
全文

高级PHP V5 对象研究

2005-09-21 16:38作者:Matt Zandstra出处:IBM责任编辑:方舟
  抽象类和方法

  虽然在父类中提供默认行为是完全合法的,但这可能不是最巧妙的方法。对于启动器,您必须依赖子类的作者来理解它们必须实现 import() 和 export(),才能在 broken 状态创建类。而且,DictionaryIO 类实际上是兄弟,而不是父子。XmlDictionaryIO 不是 DictionaryIO 的特例;相反,它是一种备选实现。

  PHP V5 允许定义部分实现的类,其主要角色是为它的子女指定核心接口。这种类必须声明为抽象。

abstract class DictionaryIO {}

  抽象类不能实例化。必须创建子类(即,创建继承它的类),并创建该子类的实例。可以在抽象类中声明标准和抽象方法,如清单 5 所示。抽象方法必须用 abstract 关键字限定,且必须只由一个方法签名组成。这意味着,抽象方法应包括 abstract 关键字、可选的可见度修改符、function 关键字,以及圆括号内可选的参数列表。它们不应有任何方法主体。

  清单 5. 声明抽象类

abstract class DictionaryIO {

protected function path( Dictionary $dictionary,
$ext ) {
$path = Dictionary::getSaveDirectory();
$path .= DIRECTORY_SEPARATOR;
$path .= $dictionary->getType().".$ext";
return $path;
}

abstract function import( Dictionary $dictionary );
abstract function export( Dictionary $dictionary );
}

  注意,path() 函数现在是受保护的。这允许来自子类的访问,但不允许来自 DictionaryIO 类型外部的访问。继承 DictionaryIO 的任何类必须实现 import() 和 export() 方法,否则就可能得到致命错误。

  声明抽象方法的任何类本身必须是声明为抽象的。继承抽象类的子类必须实现在其父类或自身中声明为抽象的所有抽象方法。

  清单 6 展示了具体的 DictionaryIO 类,为了简洁,此处省略了实际实现。

  清单 6. 具体的 DictionaryIO 类

class SerialDictionaryIO extends DictionaryIO {

 function export( Dictionary $dictionary ) {
  // implementation
 }

 function import( Dictionary $dictionary ) {
  // implementation
 }
}

class XmlDictionaryIO extends DictionaryIO {

 protected function path( Dictionary $dictionary, $ext ) {
  $path = strtolower(parent::path( $dictionary, $ext ) );
  return $path;
 }

 function export( Dictionary $dictionary ) {
  // implementation
 }

 function import( Dictionary $dictionary ) {
  // implementation
 }
}

  Dictionary 类需要一个 DictionaryIO 对象传递到它的构造函数,但它既不知道也不关心该对象是否是 XmlDictionaryIO 或 SerialDictionaryIO 的实例。它惟一知道的是给定对象继承 DictionaryIO,而且因此可以保证支持 import() 和 export() 方法。这种在运行时的类切换是面向对象编程的一个常见特性,称为多态性。

  图 2 展示了 DictionaryIO 类。注意,抽象类和抽象方法用斜体表示。该图是多态性的一个好例子。它展示了 DictionaryIO 类的已定义关系是与 DictionaryIO,但 SerialDictionaryIO 或 XmlDictionaryIO 将实现该关系。

抽象 DictionaryIO 类及其具体子类
图 2. 抽象 DictionaryIO 类及其具体子类

软件资讯·软件下载尽在天极软件

相关搜索:
关注此文读者还看过
网友关注
软件下载
娱乐下载
驱动下载
文章排行
本周
本月
最近更新
关于我们|About us|网站律师|天极服务|电子杂志|RSS订阅|加入我们|网站地图
TMG
Copyright (C) 1999-2009 Chinabyte.com, All Rights Reserved 版权所有 天极网络
商务联系、网站内容、合作建议:010-82657868 023-63659988
版权声明 在线提交意见反馈 渝ICP证B2-20030003号
经营性网站备案信息 网警备案 中国网站排名
天极传媒:天极网|比特网|IT专家网|52PK游戏网|IT分众