在 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设计模式 Observer(观察者模式)
Jun 26 PHP
7个超级实用的PHP代码片段
Jul 11 PHP
PHP的explode和implode的使用说明
Jul 17 PHP
PHP实现通用alert函数的方法
Mar 11 PHP
PHP获取当前相对于域名目录的方法
Jun 26 PHP
php页面,mysql数据库转utf-8乱码,utf-8编码问题总结
Aug 27 PHP
PHP时间戳格式全部汇总 (获取时间、时间戳)
Jun 13 PHP
PHP 7安装使用体验之性能大提升,兼容性强,扩展支持不够(升级PHP要谨慎)
Jul 27 PHP
PHP实现从上往下打印二叉树的方法
Jan 18 PHP
php常用日期时间函数实例小结
Jul 04 PHP
php array_chunk()函数用法与注意事项
Jul 12 PHP
laravel开发环境homestead搭建过程详解
Jul 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中运用jQuery的Ajax跨域调用实现代码
2012/02/21 PHP
用C/C++扩展你的PHP 为你的php增加功能
2012/09/06 PHP
php递归遍历删除文件的方法
2015/04/17 PHP
php中define用法实例
2015/07/30 PHP
PHP实现字符串大小写转函数的功能实例
2019/02/06 PHP
javascript对象的property和prototype是这样一种关系
2007/03/24 Javascript
document.getElementById为空或不是对象的解决方法
2010/01/24 Javascript
文本框中,回车键触发事件的js代码[多浏览器兼容]
2010/06/07 Javascript
jQuery源码分析-04 选择器-Sizzle-工作原理分析
2011/11/14 Javascript
浅析Js(Jquery)中,字符串与JSON格式互相转换的示例(直接运行实例)
2013/07/09 Javascript
JS的事件绑定深入认识
2014/06/26 Javascript
推荐5 个常用的JavaScript调试技巧
2015/01/08 Javascript
js禁止页面刷新与后退的方法
2015/06/08 Javascript
学习JavaScript设计模式之迭代器模式
2016/01/19 Javascript
jQuery ajax时间差导致的变量赋值问题分析
2016/01/22 Javascript
使用Promise链式调用解决多个异步回调的问题
2017/01/15 Javascript
微信小程序-获得用户输入内容
2017/02/13 Javascript
基于Bootstrap漂亮简洁的CSS3价格表(附源码下载)
2017/02/28 Javascript
node安装--linux下的快速安装教程
2017/03/21 Javascript
bootstrap响应式表格实例详解
2017/05/15 Javascript
详解vue2.0的Element UI的表格table列时间戳格式化
2017/06/13 Javascript
浅谈JS 数字和字符串之间相互转化的纠纷
2017/10/20 Javascript
区别JavaScript函数声明与变量声明
2018/09/12 Javascript
零基础之Node.js搭建API服务器的详解
2019/03/08 Javascript
使用Vue实现简单计算器
2020/02/25 Javascript
小程序自定义导航栏兼容适配所有机型(附完整案例)
2020/04/26 Javascript
Python随机生成均匀分布在单位圆内的点代码示例
2017/11/13 Python
Python输出各行命令详解
2018/02/01 Python
python ctypes库2_指定参数类型和返回类型详解
2019/11/19 Python
css3中用animation的steps属性制作帧动画
2019/04/25 HTML / CSS
温泉秘密:Onsen Secret
2020/07/06 全球购物
党员个人思想汇报
2013/12/28 职场文书
共产党员承诺书
2014/03/25 职场文书
经贸日语专业自荐信
2014/09/02 职场文书
大学优秀学生主要事迹材料
2015/11/04 职场文书
古诗文之爱国名句(77句)
2019/09/24 职场文书