作用:解决代码复用问题,解决单一继承问题
与普通类的异同
相同点
trait 能够像普通的类一样定义属性,方法(包含抽象的、静态的、抽象的)
trait 引入到基类里面,其子类里面也能访问trait里面的属性和方法。
不用点
trait不用实例化就能访问定义的普通方法以及属性。
trait里面不能定义构造函数。
细节
Trait中的方法或属性会覆盖 基类中的同名的方法或属性,而本类会覆盖Trait中同名的属性或方法
一个类可以组合多个Trait,通过逗号相隔
解决不同trait同名冲突,使用别名
demo10.php
<?php
/** trait的使用
* Desc:
* User: zyy
* Date: 2019-12-09
* Time: 上午 0:07
*/
Trait TraitOne {
public $propertyOne = 'argumentOne';
public function sayHello()
{
return 'My trait one';
}
}
Trait TraitTwo {
public function sayHello()
{
return 'My Trait Two';
}
}
class MyClass {
use TraitOne, TraitTwo {
TraitTwo::sayHello insteadof TraitOne; //指定要使用的trait
Traittwo::sayHello as twoSayHello; //同方法名的trait设置别名
}
public function traitMethodValue()
{
return $this->twoSayHello(); //调用trait别名方法
}
}
$myClass = new MyClass();
echo $myClass->twoSayHello();
class MyClassSon extends MYClass {
}
$myClass = new MyClassSon();
echo $myClass->twoSayHello(); //traits方法可以被继承
點(diǎn)擊查看更多內(nèi)容
為 TA 點(diǎn)贊
評(píng)論
評(píng)論
共同學(xué)習(xí),寫(xiě)下你的評(píng)論
評(píng)論加載中...
作者其他優(yōu)質(zhì)文章
正在加載中
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說(shuō)多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開(kāi)微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得
100積分直接送
付費(fèi)專(zhuān)欄免費(fèi)學(xué)
大額優(yōu)惠券免費(fèi)領(lǐng)