翻阅PHP手册时候无意间发现了这个东西PHP5.4新增的trait关键字,很有意思的东西,类似于把函数和成员方法include进一个类,有些地方写公共的方法之类比继承灵活很多,定义方法类似CLASS
trait Hello {
public $id = 2;
public function __construct() {
echo 'constructHello<br/>';
}
public function sayHello() {
echo 'Hello ';
}
}
trait World {
public function sayWorld() {
echo 'World';
}
}
class MyHelloWorld {
//如果没有则执行 trait Hello里的同名方法
public function __construct() {
echo 'constructMyHelloWorld<br/>';
}
//如果没有则执行 trait Hello里的同名方法
public function sayHello() {
echo 'Hello';
}
use Hello, World;//同事引入多个triat
public function sayExclamationMark() {
echo '!';
}
}
$o = new MyHelloWorld();
$o->sayHello();
$o->sayWorld();
$o->sayExclamationMark();
echo $o->id;
打印结果
constructMyHelloWorld
HelloWorld!2
经过测试,use进来的triat里的
1.方法会被所在类里的同名方法覆盖
2.成员变量如triat和类里有重名则会报错