您的位置:首页 > 编程语言 > PHP开发

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

2015-06-04 11:42 531 查看
问题的抛出

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: