PHP特性 Traits的引入

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

一句话总结:把重复的方法拆分到一个文件,通过 use 引入以达到代码复用的目的。

namespace app\index\controller;

load_trait('controller/Jump');  // 引入traits\controller\Jump

class index
{
     use \traits\controller\Jump; //一个jump方法独立出来的,实现代码的复用
     
     public function index()
     {
         $this->assign('name','value');
         $this->show('index');
     }
}

Trait 注意点
一、优先级
Trait 方法 > extends 方法 > 类方法

二、Trait 方法名冲突的解决

如下面的情况:

trait ta {
public function demo () {
echo 'ta';
}
}

trait tb {
public function demo () {
echo 'tb';
}
}

class A {
use ta,tb;
}

$a = new A();
$a->demo();
运行会报错:

PHP Fatal error: Trait method demo has not been applied, because there are collisions with other trait methods on A
Trait 方法名冲突了,解决方法有下:

insteadof
class A {
use ta,tb {
tb::demo insteadof ta;
}
}
运行结果:

tb
tb::demo insteadof ta 这句代码的意思就是用 tb 中的 demo 方法替代 ta 中的 demo 方法。

你可能感兴趣的:(PHP特性 Traits的引入)