这次我们来学的是Trait,说到Trait ,大家的印象可能就是复用
一直以来,我对复用的理解就是写一个公共类/文件,通过继承/require 来实现复用,那里需要就哪里继承/ 引用,目的就是少写代码
我们先来举个例子,使用继承来复用代码
// 首先实现控制器的基类,这里实现公共方法common namespace App\Http\Controllers\Admin; use App\Http\Controllers\Controller; class BaseController extends Controller { public function common() { echo "common function"; } } // 然后通过继承,在其他控制器里面复用common方法 class TestController extends BaseController { public function b() { $this->common(); } }
因为php是单继承,所以这种代码看起来一点都不优雅,所以我们现在使用Trait关键字来实现代码的复用
官方解释: Trait 是为类似 PHP 的单继承语言而准备的一种代码复用机制。Trait 为了减少单继承语言的限制,使开发人员能够自由地在不同层次结构内独立的类中复用 method。 Trait 和 Class 组合的语义定义了一种减少复杂性的方式,避免传统多继承和 Mixin 类相关典型问题。。
我们首先需要定义一个复用类,使用关键字trait,不是class
trait Base { public function common(){ echo "common function"; } }
然后再其他类里调用
use App\Traits\Base; class TestController extends Controller { use Base; public function index() { echo $this->common(); } }
另外,这里需要注意下调用的优先级:调用类 > Trait > 父类