在 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 相关文章推荐
NO3第三帝国留言簿制作过程
Oct 09 PHP
PHP文件大小格式化函数合集
Mar 10 PHP
PHP 面向对象程序设计(oop)学习笔记(一) - 抽象类、对象接口、instanceof 和契约式编程
Jun 12 PHP
destoon设置自定义搜索的方法
Jun 21 PHP
PHP实现远程下载文件到本地
May 17 PHP
PHP 二维数组和三维数组的过滤
Mar 16 PHP
Zend Framework实现具有基本功能的留言本(附demo源码下载)
Mar 22 PHP
PHP对XML内容进行修改和删除实例代码
Oct 26 PHP
PHP实现的ID混淆算法类与用法示例
Aug 10 PHP
PHP+百度AI OCR文字识别实现了图片的文字识别功能
May 08 PHP
laravel5.1框架基础之Blade模板继承简单使用方法分析
Sep 05 PHP
PHP中通过getopt解析GNU C风格命令行选项
Nov 18 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
WINXP下apache+php4+mysql
2006/11/25 PHP
PHP开发不能违背的安全规则 过滤用户输入
2011/05/01 PHP
php+js实现异步图片上传实例分享
2014/06/02 PHP
jQuery Mobile + PHP实现文件上传
2014/12/12 PHP
四个常见html网页乱码问题及解决办法
2015/09/08 PHP
PHP 网站修改默认访问文件的nginx配置
2017/05/27 PHP
php5.5使用PHPMailer-5.2发送邮件的完整步骤
2018/10/14 PHP
模拟select的代码
2011/10/19 Javascript
利用JS来控制键盘的上下左右键(示例代码)
2013/12/14 Javascript
js实现宇宙星空背景效果的方法
2015/03/03 Javascript
chrome浏览器当表单自动填充时如何去除浏览器自动添加的默认样式
2015/10/09 Javascript
两种方法解决javascript url post 特殊字符转义 + &amp; #
2016/04/13 Javascript
基于node实现websocket协议
2016/04/25 Javascript
javascript入门之window对象【新手必看】
2016/11/22 Javascript
AngularJS过滤器filter用法分析
2016/12/11 Javascript
微信小程序微信支付接入开发实例详解
2017/04/12 Javascript
jQuery实现新闻播报滚动及淡入淡出效果示例
2018/03/23 jQuery
JavaScript实现的DOM绘制柱状图效果示例
2018/08/08 Javascript
vue element upload实现图片本地预览
2019/08/20 Javascript
Openlayers显示瓦片网格信息的方法
2020/09/28 Javascript
python文件的md5加密方法
2016/04/06 Python
一百行python代码将图片转成字符画
2021/02/19 Python
PyCharm GUI界面开发和exe文件生成的实现
2020/03/04 Python
详解Scrapy Redis入门实战
2020/11/18 Python
清除canvas画布内容(点擦除+线擦除)
2020/08/12 HTML / CSS
雷曼兄弟的五金店:Lehman’s Hardware Store
2019/04/10 全球购物
护理专业个人求职简历的自我评价
2013/10/13 职场文书
汽车维修与检测专业应届生求职信
2013/11/12 职场文书
工业学校毕业生自荐信范文
2014/01/03 职场文书
社区健康教育实施方案
2014/03/18 职场文书
租车协议书范本
2014/04/22 职场文书
保研推荐信
2014/05/09 职场文书
护士自我推荐信范文
2015/03/24 职场文书
党员电教片《信仰》心得体会
2016/01/15 职场文书
2016最新离婚协议书范本及程序
2016/03/18 职场文书
导游经典开场白——导游词
2019/04/17 职场文书