php Trait 基础应用讲解

首先,上手册:自 PHP 5.4.0 起,PHP 实现了一种代码复用的方法,称为 trait。

随后。。。来讲解trait的用法:

trait first_trait {
    function first_trait() {//里面写你想写的代码
    }
    function second_trait() {//里面写你想写的代码
    }
    //http://blog.csdn.net/a757291228
}

首先不说怎么用,看了下面就懂怎么用了:

trait first_trait {
    function first_trait() {//里面写你想写的代码
    }
    function second_trait() {//里面写你想写的代码
    }
    //http://blog.csdn.net/a757291228
}
//新建一个类
class trait_user{
    // 在这里使用 first_trait
    use first_trait;
}
//new一个对象
$obj = new trait_user();
//随后obj就可以调用first_method了
$obj->first_trait(); 
$obj->second_trait();
//为何能够调用呢?那是因为我们在类里面使用了use然后把trait拿过来了,由于first_trait里面有这两个函数,所以我们新建类的时候就可以调用了=。=。。

解释写在代码块里面了,因为这样方便一点=。=。。。

以上就是trait的基本使用 ,当然也可以在一个类里面使用多个trait,如下:

trait first_trait {
    function first_trait() {//里面写你想写的代码
        echo '使用了f_1';
    }
    function second_trait() {//里面写你想写的代码
        echo '使用了f_2';
    }
}//http://blog.csdn.net/a757291228

trait second_trait {
    function s_first_trait() {//里面写你想写的代码
        echo '使用了s_1';
    }
    function s_second_trait() {//里面写你想写的代码
        echo '使用了s_2';
    }
}//http://blog.csdn.net/a757291228
//新建一个类
class trait_user{
    // 在这里使用 first_trait和second_trait 
    use first_trait,second_trait;
}
$obj = new trait_user();

$obj->first_trait(); 
$obj->second_trait();
//在这里我又多调用了另外的trait
$obj->s_first_trait();
$obj->s_second_trait();

以上就是使用多个trait…

我们还可以就是说在trait 里面use trait,就是trait里面用trait:

trait first_trait {
    function first_trait() {//里面写你想写的代码
        echo '使用了f_1';
    }
    function second_trait() {//里面写你想写的代码
        echo '使用了f_2';
    }
}

trait second_trait {
    //在这里使用了first_trait 。。。唔
    use first_trait;
    function s_first_trait() {//里面写你想写的代码
        echo '使用了s_1';
    }
    function s_second_trait() {//里面写你想写的代码
        echo '使用了s_2';
    }
}

//意思说只要类使用了second_trait那么同时可以使用first_trait里面的function

解释在注释 里面,使用我就不写咯=。=。。相比应该都懂了。。。

还有 一个就是冲突问题;例如两个trait里面有同名 的function,那么 该如何解决?手册中 写到,php5.4引入了新的关键字insteatdof和as,那么instead演示如下:

trait first_trait {
    function first_trait() {//同名function
        echo '使用了f_1';
    }
//http://blog.csdn.net/a757291228 强行安利
}

trait second_trait {
    function first_trait() {//同名function
        echo '使用了s_1';
    }

}

class trait_class {
    use first_trait, second_trait {
        first_trait::first_trait insteadof second_trait;
        //以上代码说明:在这里使用first_trait的同名函数替换掉second_trait中的,注意在这里是一对花括号里面写这个代码的。。。
    }
} 

以上代码就解决冲突咯。。。

接下来是as的用法:

<?php 

trait first_trait {
    function first_trait() {//同名function
        echo '使用了f_1';
    }

}

trait second_trait {
    function first_trait() {//同名function
        echo '使用了s_1';
    }

}

class Talker {
    use first_trait, second_trait {
        first_trait::first_trait insteadof second_trait;
        second_trait::first_trait as talk;
        //以上是as的用法=。=。。开始我一直搞不明白,哪里出问题了,错误信息让我有点懵,最后看了手册,发现需要insteadof另外一个trait才能使用as=。=。。这就非常 尴尬了,as就是别名的意思,第一个替换掉function后,随后用as指定之前 被替换掉的换一个名字使用,这样就可以都使用这两个function了
    }
}

//http://blog.csdn.net/a757291228 强行安利
以上就是5.4中的trait的基本用法了=。=。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

1_bit

你的余额交给我吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值