`
swincle
  • 浏览: 76059 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

【转】PHP通过接口实现多重继承

    博客分类:
  • PHP
 
阅读更多

PHP类虽然是单继承的,但是可以通过其它特殊的方式实现多重继承,比如使用接口实现,只要把类的特征抽象为接口,并通过实现接口的方式让对象有多重身 份,通过这样就可以模拟多重继承了。


下面就是一个用接口模拟多重继承的例子,源代码如下:

  1. <?  
  2. interface UserInterface{ // 定义User的接口  
  3.  function getname();  
  4. }  
  5. interface TeacherInterface{ //teacher 相关接口  
  6.  function getLengthOfService();  
  7. }  
  8. class User implements UserInterface { // 实现UserInterface接口  
  9.  private $name = "tom";  
  10.  public function getName(){  
  11.   return $this->name;  
  12.  }  
  13. }  
  14. class Teacher implements TeacherInterface { // 实现TeacherInterface接口  
  15.  private $lengthOfService = 5; // 工 龄   
  16.  public function getLengthOfService(){  
  17.   return $this->lengthOfService;  
  18.  }  
  19. }  
  20. // 继承自User类,同时实现了 TeacherInterface接口.  
  21. class GraduateStudent extends User implements TeacherInterface {  
  22.  private $teacher ;  
  23.  public function __construct(){  
  24.   $this->teacher = new Teacher();    
  25.  }   
  26.  public function getLengthOfService(){  
  27.   return $this->teacher->getLengthOfService();  
  28.  }  
  29. }  
  30. class Act{  
  31.  //注意这里的类型提示改成了接口类型  
  32.  public static function getUserName(UserInterface $_user){  
  33.   echo "Name is " . $_user->getName() ."<br>";  
  34.  }  
  35.  //这里的类型提示改成了 TeacherInterface类型.  
  36.  public static function  getLengthOfService(TeacherInterface $_teacher){  
  37.   echo "Age is " .$_teacher->getLengthOfService() ."<br>";  
  38.  }  
  39. }  
  40. $graduateStudent = new GraduateStudent();  
  41. Act::getUserName($graduateStudent);  
  42. Act::getLengthOfService($graduateStudent);  
  43. //结果正如我们所要的,实现了有多重身份的一个对象.  
  44. ?> 


示例运行结果如下:

Name is tom

Age is 5

分享到:
评论

相关推荐

    php面向对象全攻略 (十四) php5接口技术

    20.PHP5 接口技术 PHP 与大多数面向对象编程语言一样,不支持多重继承.也就是说每个类只能继承一个父 类。为了解决这个问题,PHP 引入了接口,接口的思想是指定了一个实现了该接口的类必须 实现的一系列方法。接口是...

    PHP和MySQL Web开发第4版pdf以及源码

    6.7.4 理解多重继承 6.7.5 实现接口 6.8 类的设计 6.9 编写类代码 6.10 理解PHP面向对象新的高级功能 6.10.1 使用Per-Class常量 6.10.2 实现静态方法 6.10.3 检查类的类型和类型提示 6.10.4 克隆对象 ...

    php网络开发完全手册

    5.8.3 多重接口的实现 87 5.8.4 抽象类 88 5.9 小结 90 第6章 文件系统与文本数据操作 91 6.1 PHP中目录操作详解 91 6.1.1 打开目录 91 6.1.2 关闭目录 91 6.1.3 读取目录中的文件 92 6.1.4 创建目录 92 6.1.5 删除...

    PHP和MySQL WEB开发(第4版)

    6.7.4 理解多重继承 6.7.5 实现接口 6.8 类的设计 6.9 编写类代码 6.10 理解PHP面向对象新的高级功能 6.10.1 使用Per-Class常量 6.10.2 实现静态方法 6.10.3 检查类的类型和类型提示 6.10.4 克隆对象 6.10.5 使用...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part1

    实例001 通过AppServ配置PHP开发环境 3 实例002 AppServ应用技巧 6 实例003 第1个PHP程序 7 1.2 XAMPP——PHP集成化安装包 8 实例004 通过XAMPP配置PHP开发环境 8 实例005 测试XAMPP是否安装成功 11 实例006 XAMPP...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part2

    实例001 通过AppServ配置PHP开发环境 3 实例002 AppServ应用技巧 6 实例003 第1个PHP程序 7 1.2 XAMPP——PHP集成化安装包 8 实例004 通过XAMPP配置PHP开发环境 8 实例005 测试XAMPP是否安装成功 11 实例006 XAMPP...

    PHP和MySQL Web开发第4版

    6.7.4 理解多重继承 6.7.5 实现接口 6.8 类的设计 6.9 编写类代码 6.10 理解PHP面向对象新的高级功能 6.10.1 使用Per-Class常量 6.10.2 实现静态方法 6.10.3 检查类的类型和类型提示 6.10.4 克隆对象 ...

    haxe-traits:[已弃用] Haxe 的特征

    多重继承“懒惰”接口:将traits方法复制到后代类中,因此您无需在每个实现trait的类中编写实现。 但是你仍然可以跳过 trait 中某些方法的实现来强制每个后代实现这些方法(这是一种来自 Java 或 PHP 的“经典”...

    ZendFramework中文文档

    实现订制存储 3.1.4. 使用Zend_Auth 3.2. 数据库表认证 3.2.1. 简介 3.2.2. 高级使用:持久一个 DbTable 结果对象 3.2.3. 高级用法示例 3.3. 摘要式认证 3.3.1. 简介 3.3.2. 规范(Specifics) 3.3.3. ...

Global site tag (gtag.js) - Google Analytics