Laravel中灵活使用Trait

薄洪涛5年前PHP1784

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

相关文章

五十个小技巧提高PHP执行效率

    在项目开发过程中,经常遇到了一些PHP处理程序性能底下的情况,程序运行在centos+nginx环境,虽然这个有很多的原因如:服务器本身配置,运行环境n...

Elasticsearch为什么搜索那么快?

Elasticsearch为什么搜索那么快?

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

七牛上传报文件已存在

之前做了一个大文件的分片上传,做好之后就没管了,让客户端一直自己用着,然后期间偶尔会有浏览器不兼容的现象我也懒得改,然后十一回来,客户端就给我说,有文件上传不上去,然后正好手头没活,就用改了下先看下思...

Yii2.0整合ueditor并上传图片到七牛云

Yii2.0整合ueditor并上传图片到七牛云

某个项目要做一个文章模块,用到Ueditor,并且ue中的图片要上传到七牛,所以总结下步骤;1、Yii2.0下载ueditor for Yii2.0和七牛composer require&n...

csrf攻击原理及防范

csrf攻击原理及防范

CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/XSRF。在不少的...

Laravel打印sql

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

发表评论    

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