最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
现代 PHP 新特性Trait 概览
时间:2016-05-17 编辑:简简单单 来源:一聚教程网
为什么使用Trait
PHP语言使用一种典型的单继承模型,在这种模型中,我们先编写一个通用的根类,实现基本的功能,然后扩展这个根类,创建更具体的子类,直接从父类继承实现。这叫做继承层次结构,很多编程语言都使用这个模式。大多数时候这种典型的继承模型能够良好运作,但是如果想让两个无关的PHP类具有类似的行为,应该怎么做呢?
Trait就是为了解决这种问题而诞生的。Trait能够把模块化的实现方式注入多个无关的类中,从而提高代码复用,符合DRY(Don’t Repeat Yourself)原则。比如Laravel底层用户认证相关逻辑以及软删除实现等地方都使用了Trait来实现。以Laravel自带的AuthController
为例,其中的登录、注册以及登录失败尝试次数都是通过Trait实现:
如何创建Trait
创建Trait很简单,跟创建类有点类似,只不过使用的关键字是trait
而不是class
,以上述ThrottlesLogin
为例:
trait
声明定义的是一个Trait,然后我们可以在这个Trait中像类一样定义要使用的属性和方法。insteadof
关键字,如果AuthenticatesUsers
和RegistersUsers
中都定义了redirectPath
和getGuard
方法,那么将从AuthenticatesUsers
中获取对应方法而不是RegistersUsers
。另外还可以使用as
关键字为方法起个别名,这样也可以避免命名冲突。如何使用Trait
Trait的使用方法也很简单,上面已经显示的很清楚明了,即使用use
关键字。
use
关键字,不同之处在于导入位置,命名空间在类的定义体外导入,而Trait在类的定义体内导入。代码如下 | 复制代码 |
注:PHP解释器在编译时会把Trait复制到类的定义体中,但是不会处理这个操作引入的不兼容问题,如果Trait假定类中有特定的属性或方法,需要先确保类中确实有相应的属性或方法。
|
相关文章
- PHP导出数据超时的优化建议解读 10-31
- PHP之mysql位运算解析 10-31
- Laravel实现登录跳转功能解析 10-31
- php双向队列解读 10-31
- Laravel异常上下文解决教程 10-24
- php数组查询元素位置方法介绍 10-24