【OOP】PHP下解决多继承的问题

                                                                                                                                   
问题的抛出
PHP无法实现多继承(即多个类无法继承自一个类)

来自手册的说明:

自 PHP 5.4.0 起,PHP 实现了代码复用的一个方法,称为 traits。

(理解:) 用Trait来实现对基类的继承,然后应用类来继承Trait类 从而实现多继承的优点----代码复用。

Traits 是一种为类似 PHP 的单继承语言而准备的代码复用机制。Trait 为了减少单继承语言的限制,使开发人员能够自由地在不同层次结构内独立的类中复用方法集。Traits 和类组合的语义是定义了一种方式来减少复杂性,避免传统多继承和混入类(Mixin)相关的典型问题。

Trait 和一个类相似,但仅仅旨在用细粒度和一致的方式来组合功能。Trait 不能通过它自身来实例化。它为传统继承增加了水平特性的组合;也就是说,应用类的成员不需要继承。





//Trait类可继承自基类
Trait  traitclassname{
    public function functionname(){

}
}



/**
*
*/
class mainclassname{
//use Trait类
   use traitclassname;
//重写Trait方法 优先调用
public function functionname(){

}

}
//实例化对象,只能实例化应用类的对象       而Trait的对象并不能直接实例化
$t=new mainclassname;
//调用应用类重写方法
$t->functionname();

继承优先级: 当前类-->Trait类-->基类


多个Trait类的实现
0.通过逗号分隔,在 use 声明列出多个 trait,可以都插入到一个类中
1 .如存在方法名的冲突,使用insteadof (指定Trait类名)操作符来解决此类冲突。
2.可以控制Trait来继承Trait来实现类似类的继承  通过use TraitClassName

Trait的抽象成员
参照C++中虚函数的实现  即在Trait类中Abstract 成员函数  在Class或Trait来继承此Trait时 必须要实现这个Function 以此来强制该方法的实现。

Trait静态方法
通过定义静态Trait方法 来加快脚本的速度   有利有弊,权衡使用

Trait也可以用来定义属性
使用同Function。。。。
定义在Trait中的属性不能在应用类(子类)中再次定义 否则会抛出错误 错误级别为 E_STRICT(兼容)。否则抛出致命错误


以上Trait常用注意事项  编辑自http://php.net/language.oop5.traits
 
                                                                                                                                                                                                                                                               ---- Create   By   Scnace
                                                                                                                                                                                                                                                                       2015年6月4日11:39:57



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值