php switch 引入 function_虽然PHP是单继承语言,但学会使用trait,可以轻松实现多继承...

f1e7c6077e6395e71d32960db8bceabe.png

什么是trait

Trait是为类似PHP的单继承语言而准备的一种代码复用机制。Trait为了减少单继承语言的限制,使开发人员能够自由地在不同层次结构内独立的类中复用method。

Trait是PHP5.4.0起引入,它既像类又像接口。trait是类的部分实现,可以混入一个或多个现有的PHP类中。

Trait有两个作用表明类可以做什么(像是接口);提供模块化实现(像是类)。

为什么使用trait

PHP语言使用的是单继承模型,大多数时候,这种继承模型能良好运作。可是,如果想让两个无关的PHP类具有类似的行为,应该怎么做呢?

Trait就是为了解决这种问题而诞生的。Trait能把模块化的实现方式注入多个无关的类中,而且trait还能促进代码重用。

4175691700d77825a8d9b7a7a6a31ef5.png

如何创建trait

PHP中trait的定义方式如下:

<?phptrait MyTrait{  //这里是trait的实现}

建议:建议与定义类和接口一样,一个文件只定义一个trait,这是良好实践。

trait的5种使用方法

1、简单使用

<?phptrait first_trait{     function first_method() {/*code here*/}     function second_method() {/*code here*/}}class first_class{//声明使用first_trait,用use关键字     use first_trait;}$obj = new first_class();$obj->first_method();$obj->second_method();

2、使用多个trait

<?phptrait first_trait{     function first_method() {/*code here*/}}trait second_trait{       function second_method() {/*code here*/}}class first_class{//多个trait之间用逗号分隔     use first_trait,second_trait;}$obj = new first_class();$obj->first_method();$obj->second_method();

3、trait之间的嵌套

<?phptrait first_trait{     function first_method() {/*code here*/}}trait second_trait{       use first_trait;       function second_method() {/*code here*/}}class first_class{     use second_trait;}$obj = new first_class();$obj->first_method();$obj->second_method();
563baa6e7c545eccb394f8c93a53adeb.png

4、trait的抽象方法

在trait中声明需要实现的抽象方法,这样能使使用它的Class必须实现它

<?phptrait first_trait{     function first_method() {/*code here*/}     abstract public function second_method();}class first_class{     use first_trait;     function second_method() {/*code here*/}}

5、trait之间的冲突

多个Trait之间的冲突,可以使用insteadof操作符来明确指定使用冲突方法中的哪一个;还可以用as操作符将其中一个冲突的方法以另一个名称引入

<?phptrait first_trait{     function first_function() {          echo "From Frist Trait";}}trait second_trait{       function first_function() {          echo "From Second Trait";}}class first_class{     use first_trait,second_trait{     first_trait::first_function insteadof second_trait;     second_trait::first_function as second_function;}}$obj = new first_class();$obj->first_function(); //输出:From Frist Trait$obj->second_function(); //输出:From Second Trait

好了,trait的用法你已经完全掌握了,是不是完美的实现了多继承的功能呢,赶紧用起来吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值