Laravel中灵活使用Trait

薄洪涛4年前PHP1146

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

相关文章

laravel chunk 更新数据的坑

在一些情况下,我们需要对大批量的数据进行操作,如果这个时候我们使用foreach的话,很可能会遇到操作超时的情况。在Laravel框架中我们可以很方便的使用chunk方法来解决。来看一个简单的例子:$...

YII2场景值的使用

开发的时候添加和编辑写在了一个方法里面,上传图片添加的时候需要验证为空,编辑的时候不需要,这时候yii的场景值能够解决这个问题:控制器中$model = new News...

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

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

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

redis持久化的两种方式

redis持久化的两种方式

redis为了内存数据的安全考虑,会把内存中的数据以文件形式保存到硬盘中一份,在服务器重启之后会自动把硬盘的数据恢复到内存(redis)的里边。数据保存到硬盘的过程就称为“持久化”效果。redis支持...

Yii2.0搭建接口模块教程

Yii2.0搭建接口模块教程

最近我需要做一个大项目中的一个模块,考虑用前后端分离,所以想自己搭建一套基于Yii2.0的restful接口出来,本来的时候老大想让我用spring boot,无奈我太菜只会php.....教程开始:...

PHP程序猿食用RabbitMQ方法

消息队列是什么?“消息队列”是在消息的传输过程中保存消息的容器。“消息”是在两台计算机间传送的数据单位。消息可以非常简单,例如只包含文本字符串;也可以更复杂,可能包含嵌入对象。消息被发送到队列中。“消...

发表评论    

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