Laravel中灵活使用Trait

薄洪涛5年前PHP1297

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

相关文章

Yii2.0 jQuery(...).yiiActiveForm is not a function

Yii2.0 jQuery(...).yiiActiveForm is not a function

记一个常见的错误,如下图当我们在view中创建一个activeForm的时候,有时会报这种错误;通常情况下,是jquery重复引入导致的,因为你引入的jquey的版本跟yii2自带jquery版本冲突...

Yii连接postgreSQL及与mysql优劣比较

一、 PostgreSQL 的稳定性极强, Innodb 等引擎在崩溃、断电之类的灾难场景下抗打击能力有了长足进步,然而很多 MySQL 用户都遇到过Server级的数据库丢失的场景——mysql系统...

Elasticsearch为什么搜索那么快?

Elasticsearch为什么搜索那么快?

介绍Elasticsearch 是一个分布式可扩展的实时搜索和分析引擎,一个建立在全文搜索引擎 Apache Lucene(TM) 基础上的搜索引擎.当然 Elasticsearch 并不仅仅是 Lu...

Laravel打印sql

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

workerMan之心跳检测

workerMan之心跳检测

上次咱们说到,长连接应用必须加心跳检测,避免连接由于上时间没有通讯被断开其实心跳的作用有2个:1、客户端定时给服务器发送数据,防止连接由于长时间没有通讯被断开2、服务端可以通过心跳来判断客户端是否在线...

php redis Hash操作

//为user表中的字段赋值。成功返回1,失败返回0。若user表不存在会先创建表再赋值,若字段已存在会覆盖旧值。 $redis->hSet('user', ...

发表评论    

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