在 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 相关文章推荐
rrmdir php中递归删除目录及目录下的文件
May 15 PHP
php 面试碰到过的问题 在此做下记录
Jun 09 PHP
解析PHP 5.5 新特性
Jul 02 PHP
采用ThinkPHP中F方法实现快速缓存实例
Jun 13 PHP
destoon实现公司新闻详细页添加评论功能的方法
Jul 15 PHP
apache中为php 设置虚拟目录
Dec 17 PHP
Symfony2实现从数据库获取数据的方法小结
Mar 18 PHP
Laravel5.1数据库连接、创建数据库、创建model及创建控制器的方法
Mar 29 PHP
PHP实现的登录页面信息提示功能示例
Jul 24 PHP
PHP通过curl获取接口URL的数据方法
May 31 PHP
thinkphp5.0整合phpsocketio完整攻略(绕坑)
Oct 12 PHP
php实现大文件断点续传下载实例代码
Oct 01 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
第十节 抽象方法和抽象类 [10]
2006/10/09 PHP
php file_get_contents函数轻松采集html数据
2010/04/22 PHP
在Windows系统上安装PHP运行环境文字教程
2010/07/19 PHP
php结合curl实现多线程抓取
2015/07/09 PHP
ThinkPHP3.2框架操作Redis的方法分析
2019/05/05 PHP
PHP优化之批量操作MySQL实例分析
2020/04/23 PHP
php实现图片压缩处理
2020/09/09 PHP
js和as的稳定传值问题解决
2013/07/14 Javascript
JQuery简单实现锚点链接的平滑滚动
2015/05/03 Javascript
Jquery Ajax Error 调试错误的技巧
2015/11/20 Javascript
js实现带简单弹性运动的导航条
2017/02/22 Javascript
jQuery实现的表格前端排序功能示例
2017/09/18 jQuery
基于Vue+elementUI实现动态表单的校验功能(根据条件动态切换校验格式)
2019/04/04 Javascript
微信小程序事件流原理解析
2019/11/27 Javascript
[01:14]2019完美世界城市挑战赛(秋季赛)全国总决赛精彩花絮
2020/01/08 DOTA
Python实现的文本简单可逆加密算法示例
2017/05/18 Python
Python实现注册登录系统
2017/08/08 Python
基于python3实现socket文件传输和校验
2018/07/28 Python
Python 从一个文件中调用另一个文件的类方法
2019/01/10 Python
对Python3使运行暂停的方法详解
2019/02/18 Python
keras .h5转移动端的.tflite文件实现方式
2020/05/25 Python
Python偏函数Partial function使用方法实例详解
2020/06/17 Python
python通过cython加密代码
2020/12/11 Python
您的健身减肥和健康饮食专家:vitafy
2017/06/06 全球购物
Michael Kors加拿大官网:购买设计师手袋、手表、鞋子、服装等
2019/03/16 全球购物
阿迪达斯希腊官方网上商店:adidas希腊
2019/04/06 全球购物
Lentiamo荷兰:在线订购隐形眼镜、隐形眼镜液和太阳镜
2019/10/25 全球购物
linux面试相关问题
2012/08/11 面试题
自学考试自我鉴定范文
2013/09/26 职场文书
临床医学专业个人的自我评价
2013/09/27 职场文书
医科大学毕业生自荐信
2014/02/03 职场文书
机关中层领导干部群众路线教育实践活动个人对照检查材料
2014/09/24 职场文书
2014-2015学年工作总结
2014/11/27 职场文书
运动员入场前导词
2015/07/20 职场文书
2016年感恩母亲节活动总结
2016/04/01 职场文书
muduo TcpServer模块源码分析
2022/04/26 Redis