摘要:trait弥补了php中没有双继承的缺点<?php // trait 代码复用机制 // 1.可以给当前的类添加新的特性或功能,相当于类中的插件,可以不修改父类的情况下,扩展当前类的功能 // 3.和类的语法相同,但不可以实例化类 // 4. 优先级 子类>trait>父类 同名方法 //
trait弥补了php中没有双继承的缺点
<?php
// trait 代码复用机制
// 1.可以给当前的类添加新的特性或功能,相当于类中的插件,可以不修改父类的情况下,扩展当前类的功能
// 3.和类的语法相同,但不可以实例化类
// 4. 优先级 子类>trait>父类 同名方法
// 5.命名冲突的解决方案:1.替换 2.别名
//trait 1
trait Js
{
public function js()
{
return '带带大师兄';
}
public function l(){
return 'trait1-------辣是真滴牛批';
}
}
//trait2
trait Jss
{
public function l(){
return 'trait2-------辣是真滴牛批';
}
}
//父类
class Auto
{
public $brand; //品牌
public $purpose; //用途
//构造器
public function __construct($brand,$purpose)
{
$this->brand = $brand;
$this->purpose = $purpose;
}
//保养
public function by(){
return '授权的4s店';
}
public function l(){
return '父类-----辣是真滴牛批';
}
}
//子类
class Bus extends Auto
{
//引入trait
//命名冲突的解决方案:1.替换 2.别名
use Js,Jss
{
//把 Jss中的l类给替换掉
Js::l insteadof Jss;
//将jss中的l类改个名字为ll
Jss::l as ll;
}
//
// public function l(){
// return '子类----辣是真滴牛批';
// }
}
//实例化
$bus = new Bus('奔驰','跑滴滴');
//访问子类
echo $bus->brand,'<br>';
echo $bus->purpose,'<br>';
//通过子类引入trait来访问里面的方法
echo $bus->js(),'<br>';
//访问l方法
echo $bus->l(),'<br>';
//改完名字访问trait2中的ll方法
echo $bus->ll();
?>
批改老师:天蓬老师批改时间:2018-12-16 12:29:54
老师总结:php 是不支持多继承的 , traits技术,算是弥补了这个遗憾吧