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

运行结果:

This is trait two

This is trait two_1

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

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