在 PHP 和 Laravel 中使用 Traits的方法


Posted in PHP onNovember 13, 2019

在 PHP 和 Laravel 中使用 Traits的方法 

事实上,PHP 作为一门编程语言存在的问题之一,就是你只能使用单继承。这意味着一个类只能从另一个类中继承。例如,可能希望从几个不同的类继承方法,以防止代码重复。在 PHP 5.4 中 一个新的语言特性被添加进来,这就是众所周知的 Traits,它在 Laravel 框架中被广泛使用。

PHP 官方网站给出了 Traits 的定义,如下:

“ Trait 是单继承语言(如 PHP )中的一种代码复用机制。 Trai 的目的是减少单继承语言的一些限制,能让开发者自由的重用在不同的类层次结构下几个独立类中的方法。 Trait 的语义组合与类的定义在某种程度上减少了代码的复杂度,避免了与多继承和 Mixins 相关的一些典型问题。

Trait 与类非常相似,但它的目的仅仅是用更好、一致的方式汇聚一些方法。 Trait 本身不能被实例化。除了传统继承之外,它能水平组合行为,换言之,类的应用程序不需要继承。”

PHP Traits是什么?

Trait 是一组简单的包含在另一个类中的方法。 Trait 就像一个抽象类一样,无法单独实例化。

一个 Trait 示例就像下面这样:

trait SharePost {
 public function share($item)
 {
  return 'share this post';
 }
}

然后,您可以在其他类中这样使用 Trait :

class Post {
 use SharePost;
}
class Comment {
 use SharePost;
}

现在,如果您要从这些类中创建新对象,您会发现它们都可以使用 share() 方法:

$post = new Post;
echo $post->share(''); // 'share this post' 
$comment = new Comment;
echo $comment->share(''); // 'share this post'

Traits 如何工作 ?

从上面例子可以看到, 尽管 Post 和   Comment 本身没有定义方法,但是他们可以调用   share() 方法。

Trait 是运行时 「复制和粘贴」 代码的一种方式.

这意味着 Trait 被复制到 Post and  Comment ,因此当你实例化一个新实例, 可以直接调用 share() 方法。

我会定期检查我的代码以及如何构造新代码,目的是为了将来可以快速构建新功能,并且可以轻松的开启新项目。

那么,怎样在laravel中使用traits呢?

首先我在项目的 Http 目录下创建一个Traits文件夹,并且新建了一个名叫 BrandsTrait.php 的Trait文件

使用它就像这样:

use App\Http\Traits\BrandsTrait;

class YourController extends Controller {
    use BrandsTrait;
    
    public function addProduct() {
      $brands = $this->brandsAll();
    }
}

这是我的 BrandsTrait.php

<?php
namespace App\Http\Traits;
use App\Brand;
trait BrandsTrait {
  public function brandsAll() {
    // 从品牌表中获取所有品牌.
    $brands = Brand::all();
    
    return $brands;
  }
}

甚至, 如果您在模型中找到另一种与产品和品牌相互作用有关的通用方法,那么将代码写在该 trait 是个不错的选择。

 总结

以上所述是小编给大家介绍的在 PHP 和 Laravel 中使用 Traits的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

PHP 相关文章推荐
基于数据库的在线人数,日访问量等统计
Oct 09 PHP
php 中文处理函数集合
Aug 27 PHP
浅析php学习的路线图
Jul 10 PHP
PHP内核探索:变量存储与类型使用说明
Jan 30 PHP
php使用NumberFormatter格式化货币的方法
Mar 21 PHP
PHP中实现Bloom Filter算法
Mar 30 PHP
PHP自毁程序(慎用)
Jul 09 PHP
在Mac OS上搭建Nginx+PHP+MySQL开发环境的教程
Dec 21 PHP
java模拟PHP的pack和unpack类
Apr 13 PHP
Yii2中cookie用法示例分析
Jul 18 PHP
thinkPHP数据查询常用方法总结【select,find,getField,query】
Mar 15 PHP
Laravel利用gulp如何构建前端资源详解
Jun 03 PHP
php 多个变量指向同一个引用($b = &amp;$a)用法分析
Nov 13 #PHP
php 自定义函数实现将数据 以excel 表格形式导出示例
Nov 13 #PHP
php array 转json及java 转换 json数据格式操作示例
Nov 13 #PHP
Yii框架学习笔记之应用组件操作示例
Nov 13 #PHP
Yii框架自定义数据库操作组件示例
Nov 11 #PHP
php接口隔离原则实例分析
Nov 11 #PHP
Yii框架布局文件的动态切换操作示例
Nov 11 #PHP
You might like
PHP调用Linux的命令行执行文件压缩命令
2013/01/27 PHP
ThinkPHP中create()方法自动验证表单信息
2017/04/28 PHP
20个非常棒的Jquery实用工具 国外文章
2010/01/01 Javascript
JS实现判断滚动条滚到页面底部并执行事件的方法
2014/12/18 Javascript
JS实现简单易用的手机端浮动窗口显示效果
2016/09/07 Javascript
利用jQuery.Validate异步验证用户名是否存在(推荐)
2016/12/09 Javascript
Jquery根据浏览器窗口改变调整大小的方法
2017/02/07 Javascript
初识NodeJS服务端开发入门(Express+MySQL)
2017/04/07 NodeJs
H5基于iScroll实现下拉刷新和上拉加载更多
2017/07/18 Javascript
JavaScript如何获取到导航条中HTTP信息
2017/10/10 Javascript
浅谈vuejs实现数据驱动视图原理
2018/02/23 Javascript
vue页面加载闪烁问题的解决方法
2018/03/28 Javascript
jQuery实现动态加载select下拉列表项功能示例
2018/05/31 jQuery
Vue文件配置全局变量的实例
2018/09/06 Javascript
angular中子控制器向父控制器传值的实例
2018/10/08 Javascript
Python库urllib与urllib2主要区别分析
2014/07/13 Python
Python实现的RSS阅读器实例
2015/07/25 Python
20招让你的Python飞起来!
2016/09/27 Python
Python实现连接postgresql数据库的方法分析
2017/12/27 Python
Django中的CBV和FBV示例介绍
2018/02/25 Python
对python3 中方法各种参数和返回值详解
2018/12/15 Python
在Pycharm中执行scrapy命令的方法
2019/01/16 Python
python redis连接 有序集合去重的代码
2019/08/04 Python
python集成开发环境配置(pycharm)
2020/02/14 Python
Python面向对象特殊属性及方法解析
2020/09/16 Python
Staples英国官方网站:办公用品一站式采购
2017/10/06 全球购物
世界上最好的精品店:Shoptiques
2018/02/05 全球购物
瑞典最大的儿童用品网上商店:pinkorblue.se
2021/03/09 全球购物
护理自我鉴定范文
2013/10/06 职场文书
小学生读书活动总结
2014/06/30 职场文书
竞选班干部演讲稿100字
2014/08/20 职场文书
写给女朋友的保证书
2015/05/09 职场文书
关于运动会的广播稿
2015/08/19 职场文书
MySQL不使用order by实现排名的三种思路总结
2021/06/02 MySQL
Java实现二维数组和稀疏数组之间的转换
2021/06/27 Java/Android
如何使用 resize 实现图片切换预览功能
2021/08/23 HTML / CSS