当前位置:Gxlcms > PHP教程 > traits与interfaces有什么区别?

traits与interfaces有什么区别?

时间:2021-07-01 10:21:17 帮助过:44人阅读

traits与interfaces的区别是:1、trait类似于include,可以用use放在类中间,定义的方法作为class的一部分,本身不能直接实例化;2、interface里面的方法都是虚拟的,需要在继承的时候对这些方法进行重定义。

traits与interfaces的区别是:

1、trait看上去更像是为了代码的复用而写的一个小插件,它类似于include,可以用use放在类中间,让trait里面定义的方法作为class的一部分,本身不能直接实例化。

2、interface里面的方法都是虚拟的,需要在继承的时候对这些方法进行重定义。也就是说,方法是说明性质的,并没有实际操作,而你在继承的时候,需要实现这些方法,不然就会出错,而且不能缺失。interface经常用于架构的时候,对一个实例所拥有的属性和方法进行抽象定义。简单来讲类似一个协议,是老板下达的任务。你要继承的话,必须满足这个协议,也就是完成老板下达的任务。

  1. <?php
  2. trait MyTrait
  3. {
  4. protected $var = 'MyTrait_var';
  5. protected $var1 = 'MyTrait_var';
  6. function __construct()
  7. {
  8. echo $this->var."</br>";
  9. }
  10. function a()
  11. {
  12. echo "a"."</br>";
  13. }
  14. }
  15. interface MyInterface
  16. {
  17. function __construct();
  18. function b();
  19. }
  20. abstract class MyAbstract
  21. {
  22. protected $var2 = 'MyAbstract_var';
  23. use MyTrait;
  24. function b()
  25. {
  26. echo "b"."</br>";
  27. }
  28. }
  29. class MyClass extends MyAbstract implements MyInterface
  30. {
  31. protected $var3 = 'MyClass_var';
  32. function c()
  33. {
  34. echo "c"."</br>";
  35. }
  36. }
  37. $class = new MyClass();
  38. $class->a();
  39. $class->b();
  40. $class->c();

以上代码中,MyAbstract中的function b()也可以放在MyClass中,或者由MyAbstract实现接口MyInterface

相关学习推荐:PHP编程从入门到精通

以上就是traits与interfaces有什么区别?的详细内容,更多请关注gxlcms其它相关文章!

人气教程排行