在 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 相关文章推荐
一个PHP操作Access类(PHP+ODBC+Access)
Jan 02 PHP
php zlib压缩和解压缩swf文件的代码
Dec 30 PHP
PHP实现自动对图片进行滚动显示的方法
Mar 12 PHP
解决php的“It is not safe to rely on the system’s timezone settings”问题
Oct 08 PHP
thinkphp实现附件上传功能
May 26 PHP
PHP基于imagick扩展实现合成图片的两种方法【附imagick扩展下载】
Nov 14 PHP
PHP实现在对象之外访问其私有属性private及保护属性protected的方法
Nov 20 PHP
利用PHP判断是手机移动端还是PC端访问的函数示例
Dec 14 PHP
PHP扩展Swoole实现实时异步任务队列示例
Apr 13 PHP
PHP5.6.8连接SQL Server 2008 R2数据库常用技巧分析总结
May 06 PHP
解决php用mysql方式连接数据库出现Deprecated报错问题
Dec 25 PHP
PHP数组array类常见操作示例
May 15 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计算两个路径的相对路径
2013/06/14 PHP
php中3种方法删除字符串中间的空格
2014/03/10 PHP
如何取得中文输入的真实长度?
2006/06/24 Javascript
用 Javascript 验证表单(form)中多选框(checkbox)值
2009/09/08 Javascript
AJAX使用了UpdatePanel后无法使用alert弹出脚本
2010/04/02 Javascript
初学js 新节点的创建 删除 的步骤
2011/07/04 Javascript
jquery实现marquee效果(文字或者图片的水平垂直滚动)
2013/01/07 Javascript
JavaScript中的迭代器和生成器详解
2014/10/29 Javascript
node.js中的console.trace方法使用说明
2014/12/09 Javascript
laypage分页控件使用实例详解
2016/05/19 Javascript
使用BootStrap实现悬浮窗口的效果
2016/12/13 Javascript
JavaScript ES6中export、import与export default的用法和区别
2017/03/14 Javascript
微信小程序实现传参数的几种方法示例
2018/01/10 Javascript
vue父组件向子组件传递多个数据的实例
2018/03/01 Javascript
微信小程序中转义字符的处理方法
2019/03/28 Javascript
jsonp跨域获取百度联想词的方法分析
2019/05/13 Javascript
微信小程序点击图片实现长按预览、保存、识别带参数二维码、转发等功能
2019/07/20 Javascript
react组件基本用法示例小结
2020/04/27 Javascript
[40:03]DOTA2上海特级锦标赛主赛事日 - 1 败者组第一轮#1EHOME VS Archon
2016/03/02 DOTA
Python利用Beautiful Soup模块修改内容方法示例
2017/03/27 Python
Django1.9 加载通过ImageField上传的图片方法
2018/05/25 Python
Python基于OpenCV库Adaboost实现人脸识别功能详解
2018/08/25 Python
使用OpenCV实现仿射变换—缩放功能
2019/08/29 Python
Python scrapy增量爬取实例及实现过程解析
2019/12/24 Python
Python用5行代码实现批量抠图的示例代码
2020/04/14 Python
Python使用jupyter notebook查看ipynb文件过程解析
2020/06/02 Python
Python enumerate() 函数如何实现索引功能
2020/06/29 Python
7款设计巧妙的css3飘带状3D立体效果的导航菜单和表单窗口
2013/02/04 HTML / CSS
荷兰优雅女装网上商店:Heine
2016/11/14 全球购物
linux面试相关问题
2013/04/28 面试题
应用电子专业学生的自我评价
2013/10/16 职场文书
简历上的自我评价
2014/02/03 职场文书
中学生综合素质自我评价
2015/03/06 职场文书
Python Matplotlib绘制条形图的全过程
2021/10/24 Python
Python 正则模块详情
2021/11/02 Python
开发者首先否认《遗弃》被取消的传言
2022/04/11 其他游戏