首先,上手册:自 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_traituse 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/a757291228trait 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() {//同名functionecho '使用了f_1';}
//http://blog.csdn.net/a757291228 强行安利
}trait second_trait {function first_trait() {//同名functionecho '使用了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() {//同名functionecho '使用了f_1';}}trait second_trait {function first_trait() {//同名functionecho '使用了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的基本用法了=。=。。