Laravel中灵活使用Trait

薄洪涛5年前PHP1756

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

相关文章

谷歌浏览器加载前端资源status=canceled

谷歌浏览器加载前端资源status=canceled

如图,今天在做弹出框(modal中用了iframe)的时候,发现模态框弹出的时候,会有一些前端资源加载被取消,但是也会有加载时间,影响页面的加载速度;然后我尝试用火狐,发现没有这个问题经过一顿goog...

跨域的其他方式

上次向大家介绍了跨域的解决方式jsonp,总感觉差点什么,所以,补充一下,介绍另外一种跨域方式:比如说,公司内部系统之间,比如ERP和OA之间想要进行数据交互,但是每个系统都有自己的域名,如果想实现数...

Yii2.0搭建接口模块教程

Yii2.0搭建接口模块教程

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

Elasticsearch第二篇之数据操作

    上一篇向大家讲解了Elasticsearch的部署安装和基本设置,这篇文章就和大家一起熟悉下Elastic的数据库操作,和普通数据库不同,es库需要公告...

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

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

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

Yii2使用phpOffice导出excel报错

Yii2使用phpOffice导出excel报错

线上导出excel的时候,是不是出现无法访问,如下图因为导出的数据量比较大,我怀疑是内存溢出,于是增加了内存分配值,发现仍然报错,于是我查了下日志,如下2020-08-14 21:31:12...

发表评论    

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