Laravel中灵活使用Trait

薄洪涛5年前PHP1785

这次我们来学的是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 > 父类

标签: Trait

相关文章

【转】TCP长连接和短连接区别

【转】TCP长连接和短连接区别

    当网络通信时采用TCP协议时,在真正的读写操作之前,server与client之间必须建立一个连接,当读写操作完成后,双方不再需要这个连接时它们可以释放...

php使用curl获取elasticsearch中数据

我最近在做一个电动车的项目,其中,有一个功能是这样的,我需要获取指定车辆的最新的五条位置信息,位置信息是保存到es库中的,我使用的是Yii2.0框架,本来想使用Yii封装的组件去获取数据的,然后觉得麻...

Laravel打印sql

在AppServiceProvider.php的boot方法中,增加以下代码DB::listen(     function ($sql) ...

workerman实现聊天室

workerman实现聊天室

Workerman的一些应用方向如下1、即时通讯类 例如网页即时聊天、即时消息推送、微信小程序、手机app消息推送、PC软件消息推送等等 [示例 workerman-chat聊天室 、&nb...

PostgreSQL教程之安装连接

PostgreSQL教程之安装连接

新公司需要用PostgreSQL数据库,而且网上的资料比较少,先自己整理一下;一、PostgreSQL是什么?PostgreSQL是一个功能强大的开源对象关系数据库管理系统(ORDBMS)。 用于安全...

Elasticsearch第三篇之全文搜索及在Yii2.0中的使用

Elasticsearch第三篇之全文搜索及在Yii2.0中的使用

前几天做了一个模块,大数据的搜索,其实也不是特别大,组合起来差不多800万左右,用的是mysql数据库,需求有这么变态的两点;需要按照地址去搜索按照起止时间去搜索别的不说,就这两条,mysql也就只能...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。