首页 >后端开发 >PHP问题 >traits与interfaces有什么区别?

traits与interfaces有什么区别?

coldplay.xixi
coldplay.xixi原创
2020-07-01 15:43:023777浏览

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

traits与interfaces有什么区别?

traits与interfaces的区别是:

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

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

<?php
trait MyTrait
{
    protected $var = &#39;MyTrait_var&#39;;
    protected $var1 = &#39;MyTrait_var&#39;;
 
    function __construct()
    {
        echo $this->var."</br>";
    }
 
    function a()
    {
        echo "a"."</br>";
    }
}
 
interface MyInterface
{
    function __construct();
    function b();
}
 
abstract class MyAbstract
{
    protected $var2 = &#39;MyAbstract_var&#39;;
    use MyTrait;
 
    function b()
    {
        echo "b"."</br>";
    }
}
 
class MyClass extends MyAbstract implements MyInterface
{
    protected $var3 = &#39;MyClass_var&#39;;
    function c()
    {
        echo "c"."</br>";
    }
}
 
$class = new MyClass();
$class->a();
$class->b();
$class->c();

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

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

以上是traits与interfaces有什么区别?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn