PHP中trait示例

这篇博客介绍了PHP中的Trait特性,它允许在多个类中复用代码。Trait本身不可实例化,需通过`use`关键字在其他类中继承。当使用多个Trait时,若出现方法冲突,可通过`insteadof`或`as`来解决。此外,`__TRAIT__`常量可获取Trait的名称。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

trait Animail{
    function traitName(){
        echo __TRAIT__;
        echo "<br>";
        return $this;
    }

    function getName(){
        echo __FUNCTION__;
        return $this;
    }
}

trait Plant{
    use Animail;
}

class Test{
    use Plant;
}
echo "<pre>";
(new Test)->traitName()->getName();

echo "<br><br>";

trait trait1{
    public function eat(){
        echo "This is trait1 eat";
    }
    public function drive(){
        echo "This is trait1 drive";
    }
}
trait trait2{
    public function eat(){
        echo "This is trait2 eat";
    }
    public function drive(){
        echo "This is trait2 drive";
    }
}
class cat{
    use trait1,trait2{
        trait1::eat insteadof trait2;
        trait1::drive insteadof trait2;
    }
}
class dog{
    use trait1,trait2{
        trait1::eat insteadof trait2;
        trait1::drive insteadof trait2;
        trait2::eat as eaten;
        trait2::drive as driven;
    }
}
$cat = new cat();
$cat->eat();
echo "<br/>";
$cat->drive();
echo "<br/>";
echo "<br/>";
echo "<br/>";
$dog = new dog();
$dog->eat();
echo "<br/>";
$dog->drive();
echo "<br/>";
$dog->eaten();
echo "<br/>";
$dog->driven();

执行结果:

Animail
getName

This is trait1 eat
This is trait1 drive


This is trait1 eat
This is trait1 drive
This is trait2 eat

This is trait2 drive

trait定义的类不能实例化,可以在其他类中使用use进行继承,可以变相实现php的多类继承。如果要使用多个trait,

如果出现冲突可以将trait中的方法使用insteadof或者取别名的as方式进行区分。预定义常量__TRAIT__可以获取trait名称。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值