现代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
    } 
}








猜你喜欢

转载自blog.csdn.net/wujiangwei567/article/details/79534608