首页 > 语言 > PHP > 正文

PHP实现多继承的trait语法的介绍(代码示例)

2024-09-04 11:43:55
字体:
来源:转载
供稿:网友

本篇文章给大家带来的内容是关于PHP实现多继承的trait语法的介绍(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

PHP没有多继承的特性。即使是一门支持多继承的编程语言,我们也很少会使用这个特性。在大多数人看来,多继承不是一种好的设计方法。

但是开发中用到多继承该怎么办呢?

下面介绍一下使用"trait"来实现php中多继承的问题。

自PHP5.4开始,php实现了代码复用的方法"trait"语法。

Trait是为PHP的单继承语言而准备的一种代码复用机制。为了减少单继承的限制,是开发在不同结构层次上去复用method,Trait 和 Class 组合的语义定义了一种减少复杂性的方式,避免传统多继承和 Mixin 类相关典型问题。

需要注意的是,从基类继承的成员会被 trait 插入的成员所覆盖。优先顺序是来自当前类的成员覆盖了 trait 的方法,而 trait 则覆盖了被继承的方法。

先来个例子:

  1. trait TestOne{ 
  2.  
  3.     public function test() 
  4.  
  5.     { 
  6.  
  7.         echo "This is trait one <br/>"
  8.  
  9.     } 
  10.  
  11.  
  12. trait TestTwo{ 
  13.  
  14.     public function test() 
  15.  
  16.     { 
  17.  
  18.         echo "This is trait two <br/>"
  19.  
  20.     } 
  21.  
  22.     public function testTwoDemo() 
  23.  
  24.     { 
  25.  
  26.         echo "This is trait two_1"
  27.  
  28.     } 
  29.  
  30.  
  31. class BasicTest{ 
  32.  
  33.     public function test(){ 
  34.  
  35.         echo "hello world/n"
  36.  
  37.     } 
  38.  
  39.  
  40. class MyCode extends BasicTest{ 
  41.  
  42.     //如果单纯的直接引入,两个类中出现相同的方法php会报出错 
  43.  
  44.     //Trait method test has not been applied, because there are collisions with other trait  
  45.  
  46.     //methods on MyCode  
  47.  
  48.     //use TestOne,TestTwo; 
  49.  
  50.     //怎么处理上面所出现的错误呢,我们只需使用insteadof关键字来解决方法的冲突 
  51.  
  52.     use TestOne,TestTwo{ 
  53.  
  54.         TestTwo::test insteadof TestOne; 
  55.  
  56.     } 
  57. //Vevb.com 
  58.  
  59. $test = new MyCode(); 
  60.  
  61. $test->test(); 
  62.  
  63. $test->testTwoDemo(); 

运行结果:

This is trait two

This is trait two_1

以上就是PHP实现多继承的trait语法的介绍(代码示例)的详细内容。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表