在 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文本数据库的搜索方法
Oct 09 PHP
给php新手谈谈我的学习心得
Feb 25 PHP
PHP 数据结构 算法描述 冒泡排序 bubble sort
Jul 10 PHP
PHP curl实现抓取302跳转后页面的示例
Jul 04 PHP
深入理解PHP中的Streams工具
Jul 03 PHP
PHP的Yii框架的常用日志操作总结
Dec 08 PHP
php文件缓存方法总结
Mar 16 PHP
Symfony2之session与cookie用法小结
Mar 18 PHP
Smarty模板变量调节器用法分析
May 23 PHP
PHP中利用sleep函数实现定时执行功能实现代码
Aug 25 PHP
php getcwd与dirname(__FILE__)区别详解
Sep 24 PHP
PHP实现在对象之外访问其私有属性private及保护属性protected的方法
Nov 20 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
使用PHPMYADMIN操作mysql数据库添加新用户和数据库的方法
2010/04/02 PHP
超级实用的7个PHP代码片段分享
2012/01/05 PHP
PHP模板解析类实例
2015/07/09 PHP
PHP中的数组处理函数实例总结
2016/01/09 PHP
微信公众号判断用户是否已关注php代码解析
2016/06/24 PHP
yii2使用GridView实现数据全选及批量删除按钮示例
2017/03/01 PHP
php 从指定数字中获取随机组合的简单方法(推荐)
2017/04/05 PHP
PHP+Ajax实现上传文件进度条动态显示进度功能
2018/06/04 PHP
ExtJS 2.0实用简明教程 之ExtJS版的Hello
2009/04/29 Javascript
Mootools 1.2教程(3) 数组使用简介
2009/09/14 Javascript
ExtJS自定义主题(theme)样式详解
2013/11/18 Javascript
页面实时更新时间的JS实例代码
2013/12/18 Javascript
JavaScript包装对象使用详解
2015/07/09 Javascript
JS实现仿微博可关闭弹出层效果
2015/09/21 Javascript
实例讲解jquery中mouseleave和mouseout的区别
2016/02/17 Javascript
JS选取DOM元素的简单方法
2016/07/08 Javascript
基于jQuery的AJAX和JSON实现纯html数据模板
2016/08/09 Javascript
Bootstrap表单简单实现代码
2017/03/06 Javascript
vue实现动态数据绑定
2017/04/28 Javascript
Angular2学习教程之ng中变更检测问题详解
2017/05/28 Javascript
解决layer.open弹出框不能获取input框的值为空的问题
2019/09/10 Javascript
生成无限制的微信小程序码的示例代码
2019/09/20 Javascript
Vue解决echart在element的tab切换时显示不正确问题
2020/08/03 Javascript
JavaScript实现多球运动效果
2020/09/07 Javascript
[53:44]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Magma BO3 第一场 1月31日
2021/03/11 DOTA
Python命令行参数解析模块optparse使用实例
2015/04/13 Python
Python 实现引用其他.py文件中的类和类的方法
2018/04/29 Python
详解如何减少python内存的消耗
2019/08/09 Python
Python实现CAN报文转换工具教程
2020/05/05 Python
Python实现读取并写入Excel文件过程解析
2020/05/27 Python
Python 随机按键模拟2小时
2020/12/30 Python
数据库笔试题
2013/05/09 面试题
《满井游记》教学反思
2014/02/26 职场文书
安全生产警示教育活动总结
2015/05/09 职场文书
《浅水洼里的小鱼》教学反思
2016/02/16 职场文书
python获取字符串中的email
2022/03/31 Python