现代PHP二(性状trait)
1. 性状的定义
性状是类的部分实现,可以实现类的部分常量、属性和方法。
2. 为什么要使用性状
我们知道PHP大部分类的共性一般是使用类的继承来实现的,这样所有的子类都可以使用父类提供继承
的方法和属性,但是,很多时候,我们会觉得继承的耦合性太强,有时候两个完全不相干的实物,也会有
共同的属性和方法,比如计算机(AI)和人,都会思考和学习,但是他们是两个完全不同的物种,我们
只需要用到他们学习的方法和属性,如果两个继承自同一个类,那么我们如何写这个类呢?
这时候性状trait 就派上用场了,我们将各自公用的属性和方法独立出来,形成性状trait,在他们
需要的时候引入即可,可以提高代码的复用性。
3. 性状的使用
(0)使用条件
PHP version >= 5.4
(1)性状的声明
性状以 trait 关键字进行声明,编写规则则和类完全一样
<?php
trait StudyTrait{
/** @var think */
public $think;
public function study(){
echo 'learning';
}
}
(2)性状的使用
性状的使用和命名空间有些类似,都是使用 use关键字,但是性状的使用语句在class 类里面
<?php
class People{
use StudyTrait;
public function getStudy(){
$this->study();
}
}
性状的使用如果出现相同的方法,优先级依次是
当前类 > trait > 父类
详情可参照: 性状详解
(3)性状方法冲突的解决
当多个性状被同一个类使用的时候,如果出现同名或者同类型方法,可以使用
关键字 inseadof 替代某些方法
关键字 as 给同名方法起别名
Class C {
use A, B {
C::c1 insteadof A; //当前类中 同名方法用c1 替换掉 A中的c1
B::b1 insteadof C; //B中 同名方法用b1 替换掉 C中的b1
A::b2 as a2; //给同名的b2 起个别名 a2
}
}
还没有评论,来说两句吧...