博客列表 >trait类1010

trait类1010

ShunPro的博客
ShunPro的博客原创
2019年10月14日 14:08:23797浏览

我对trait类的一点儿认识 :

    trait类, 是为了解决php类的单继承问题
    trait类, 是个方法集
    trait类, 是父类与子类之间的一个类, 扩充父类的方法
    trait类, 不能被实例化, 不能被继承extends
    trait类, 重写父类同名的方法后, 在子类中, trait类中的方法将覆盖父类方法


trait类的声明 :

trait类的定义和类相似 , 但以 trait 关键字来声明

trait T_name1
{
    public functiong method1()
    {
        //方法一 ;
    }
    public functiong method2()
    {
        //方法二 ;
    }
    // ....    
}

在子类中使用use关键字引入trait类

class SubClass extends SuperClass
{
    use T_name1;
    use T_name2;
    /...
}


方法的优先级为 : 子类  ---> trait类  ---> 父类

代码示例:

class Animal
{
    public function cry()
    {
        echo 'Say : 吼!!!'.'<br>';
    }
    public function eat()
    {
        echo '吃'.'<br>';
    }
}

// 不直接变动父类, 通过 traits 增加新的方法集, 或修改父类方法
trait Action
{
    public function cry()
    {
        echo 'Say : 啊呜!'.'<br>';
    }
    public function run()
    {
        echo '跑得快!'.'<br>';
    }
    public function sleep()
    {
        echo '睡一觉!'.'<br>';
    }
}

class Dog extends Animal
{
    // 引入trait类
    use Action;
    public function eat()
    {
        echo '狗连***都吃'.'<br>';
    }
    public function sleep()
    {
        echo '狗趴着睡!'.'<br>';
    }
}

$my_dog = new Dog();
$my_dog->cry();
$my_dog->eat();
$my_dog->run();
$my_dog->sleep();

运行结果 : 

        Say : 啊呜!
        狗连***都吃
        跑得快!
        狗趴着睡!

上一条:H5 打开app下一条:自动加载类文件
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议