PHP trait的使用

1.一个trait可以供多个类来使用

<?php 
trait Bt{
    public function atest(){
        echo 'hello ';
    }
    public function btest(){
        echo 'world';
    }
    public function ab(){
        $this->atest();
        $this->btest();
    }
}

//可以被多个类进行复用
//Test类 使用Bt
class Test{
    use Bt;
}
$test=new Test();
$test->ab(); //hello world

//Tmp类 使用Bt
class Tmp{
    use Bt;
}
$tmp=new Tmp();
$tmp->ab(); hello world

2.一个类可以使用多个trait,解决了类的单继承的问题

<?php 
trait A{
    public function a(){
        echo 'hello ';
    }
}

trait B{
    public function b(){
        echo 'world';
    }
}

class Test{
    use A,B;
    public function c(){
        echo '...';
    }
}
$test=new Test();
$test->a();
$test->b();
$test->c();
//hello world...


?>

3.trait中可以定义属性

<?php 
trait A{
    public $abc="abc";//trait里面可以定义属性
}
class Test{
    use A;
    public function c(){
        echo $this->abc; //输入trait A 中定义的属性
    }
}
$test=new Test();

$test->c(); //abc

4.trait 可以嵌套使用

<?php 
trait A{
    public $abc="abc";//trait里面可以定义属性
    public function a(){
        echo 'hello ';
    }
}

trait B{
    public function b(){
        echo 'world';
    }
}
//trait C 嵌套 A B
trait C{
    use A,B;
}
class Test{
    use C;
    public function c(){
        echo $this->abc; //输入trait A 中定义的属性
    }
}
$test=new Test();
$test->a();
$test->b();
$test->c();
//hello world abc


?>

5.trait的优先级

<?php

/**
 * 讨论trait的优先级
 *1.当前类中的方法与trait类,父类中的方法重名,该怎么办?
 * 当前类优先级最高,trait类次之,父类最低
 */

//声明父类
class Test
{
    public function hello()
    {
        return __METHOD__;
    }
}

//trait类
trait Demo1{
    public function hello(){
        return __METHOD__;
    }
}


//实例类
class Demo extends Test
{
    use Demo1;
    public function hello()
    {
        return __METHOD__;
    }
}

$obj=new Demo();
echo $obj->hello();   

#优先级  Demo>Demo1>Test

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值