`
swincle
  • 浏览: 79167 次
  • 性别: 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多重接口的实现方法

    在PHP中,多重继承是不被支持的,但类可以通过实现多个接口来达到类似多重继承的效果。 在本文中,我们主要讲解PHP多重接口的实现,具体涉及到接口的定义、如何在类中实现多个接口,以及一些相关的使用技巧。 首先...

    PHP接口多继承及tarits实现多继承效果的方法

    Traits不能被实例化,它们提供了一种方式来组合类的行为,类似于多重继承。例如: ```php trait MyTrait { function traitMethod1() {} function traitMethod2() {} } class MyClass { use MyTrait; } ``` 在...

    php新特性之“接口”

    PHP接口支持多重继承,一个接口可以继承多个其他接口,从而复用和组合接口的功能。例如: ```php interface AnotherInterface { public function anotherMethod(): string; } interface MyInterface extends ...

    PHP高级教程php详解

    4. 继承:PHP支持单继承,一个类只能直接继承一个父类,但可以通过接口实现多重继承的效果。继承可以重用父类的代码,实现代码复用和扩展。 5. 抽象类与接口:抽象类使用abstract关键字声明,至少包含一个抽象方法...

    php 多继承的几种常见实现方法示例

    PHP虽然不支持多重继承,但支持接口继承。通过定义多个接口并让一个类实现这些接口,可以达到类似多继承的效果。接口强制类实现其中的所有抽象方法。例如: ```php interface testA { function echostr(); } ...

    (第23讲) PHP面向对象开发的学习(七)

    在PHP中,接口可以被用作多重继承的替代方案,因为PHP本身并不支持多重继承。通过实现多个接口,一个类可以同时“继承”多个行为集合。接口还可以用于强制执行某些类必须实现特定的方法,这对于设计模式,如策略模式...

    PHP程序设计-3期(KC016) 3.8.2 类的继承常见问题.docx

    接口定义一组方法,但不提供具体实现,类可以实现多个接口来达到类似多重继承的效果。组合则是将多个类的对象组合在一个类中,通过对象的组合来实现功能的集成。 问题2:访问权限问题。在PHP中,有public、...

    PHP5面向对象初步-part4.pdf

    通过让一个类实现多个接口,并通过组合的方式包含其他类的功能,可以达到多重继承的目的,尽管这种实现方式并非真正的多继承。 ### 简单工厂模式 简单工厂模式是一种设计模式,它提供了一种创建对象的接口,但允许...

    PHP设计模式(五)适配器模式Adapter实例详解【结构型】

    然而,由于PHP不支持多重继承,因此在PHP中类适配器模式通常并不常见。 2. 对象适配器模式: 对象适配器模式通过包含被适配类的实例并实现目标接口来工作。适配器类通过内部的方法调用来实现接口,而不是直接继承...

    PHP5学习对象教程(CHM)

    4. **继承**: PHP5支持单继承,即一个类只能直接继承自一个父类,但可以通过接口实现多重继承的效果。继承使得子类可以扩展或修改父类的行为。 5. **接口(Interface)**: 接口定义了一组必须被实现的方法,类可以...

    PHP 对象继承原理与简单用法示例

    这意味着你不能直接从多个类继承,但可以通过实现接口来模拟多重继承。 2. **继承关系**:子类继承父类的所有公共和受保护的方法和属性,但不包括私有成员。子类可以覆盖或重写父类的方法以实现自己的功能。 3. **...

    PHP入门教程之面向对象的特性分析(继承,多态,接口,抽象类,抽象方法等)

    接口的目的是为了实现多重继承,因为PHP不支持多重继承,但可以通过实现多个接口来间接达到多重继承的效果。 抽象类是不能实例化的类,它通常用作其他类的基类。抽象类中可以包含抽象方法和具体方法。抽象方法是...

    PHP5权威编程_高清300dpi版

    - **继承**:PHP5支持单继承,即一个类只能继承自一个父类,但可以通过接口实现多重继承的效果。 - **抽象类与接口**:抽象类包含抽象方法,这些方法没有实现代码,子类必须实现这些抽象方法。接口类似于抽象类,但...

    PHP5_OOP思维导图

    一个类可以实现多个接口,从而实现多重多态。 **七、构造函数与析构函数** 1. **构造函数**:`__construct()`是类的一个特殊方法,用于初始化新创建的对象。当创建新对象时,PHP会自动调用构造函数。 2. **析构函数...

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

    由于PHP不支持多重继承,即一个类只能继承一个父类,因此接口成为了扩展功能和实现多态性的有效方式。 接口是一种特殊的抽象类,但与抽象类不同的是,接口的所有方法都是抽象的,并且默认具有public访问权限。这...

    php面向对象编程

    一个类可以实现多个接口,以达到多重继承的效果。接口主要用于强制子类实现特定的方法,确保子类遵循统一的规范。 案例分析: - 抽象类示例中,`Computer`类是抽象类,包含一个抽象方法`_run()`和一个普通方法`_run...

    php面向对象的技术好代码

    类可以实现多个接口,但只能继承一个抽象类,这样可以实现多重继承的效果。 5. **命名空间(Namespace)**:PHP 5.3引入了命名空间,它解决了大型项目中类名冲突的问题。通过命名空间,我们可以将相关类组织在一起...

    深入分析php中接口与抽象类的区别

    3. **多重继承**:PHP允许一个类实现多个接口,这被称为接口的多重继承,解决了单继承的局限性。 4. **强制实现**:如果一个类声明实现了某个接口,就必须提供接口中定义的所有方法的实现。 接着,我们看抽象类的...

Global site tag (gtag.js) - Google Analytics