zoukankan      html  css  js  c++  java
  • 如何在 PHP 和 Laravel 中使用 Traits



    事实上,PHP 作为一门编程语言存在的问题之一,就是你只能使用单继承。这意味着一个类只能从另一个类中继承。例如,可能希望从几个不同的类继承方法,以防止代码重复。在 PHP 5.4 中 一个新的语言特性被添加进来,这就是众所周知的 Traits,它在 Laravel 框架中被广泛使用。

    PHP 官方网站给出了 Traits 的定义,如下:

    “ Trait 是单继承语言(如 PHP )中的一种代码复用机制。 Trai 的目的是减少单继承语言的一些限制,能让开发者自由的重用在不同的类层次结构下几个独立类中的方法。 Trait 的语义组合与类的定义在某种程度上减少了代码的复杂度,避免了与多继承和 Mixins 相关的一些典型问题。
    Trait 与类非常相似,但它的目的仅仅是用更好、一致的方式汇聚一些方法。 Trait 本身不能被实例化。除了传统继承之外,它能水平组合行为,换言之,类的应用程序不需要继承。”

    PHP Traits是什么?

    Trait 是一组简单的包含在另一个类中的方法。 Trait 就像一个抽象类一样,无法单独实例化。

    一个 Trait 示例就像下面这样:

    1 trait SharePost {
    2 
    3   public function share($item)
    4   {
    5     return 'share this post';
    6   }
    7 
    8 }

    然后,您可以在其他类中这样使用 Trait :

     1 class Post {
     2 
     3   use SharePost;
     4 
     5 }
     6 
     7 class Comment {
     8 
     9   use SharePost;
    10 
    11 }

    现在,如果您要从这些类中创建新对象,您会发现它们都可以使用 share()方法:

    1 $post = new Post;
    2 echo $post->share(''); // 'share this post' 
    3 
    4 $comment = new Comment;
    5 echo $comment->share(''); // 'share this post'

    Traits 如何工作 ?

    从上面例子可以看到, 尽管 PostComment 本身没有定义方法,但是他们可以调用 share() 方法。

    Trait 是运行时 「复制和粘贴」 代码的一种方式.

    这意味着 Trait 被复制到 Post and Comment ,因此当你实例化一个新实例, 可以直接调用 share() 方法。

    我会定期检查我的代码以及如何构造新代码,目的是为了将来可以快速构建新功能,并且可以轻松的开启新项目。

    那么,怎样在laravel中使用traits呢?

    首先我在项目的Http 目录下创建一个Traits文件夹,并且新建了一个名叫 BrandsTrait.php 的Trait文件

    使用它就像这样:

    1 use AppHttpTraitsBrandsTrait;
    2 
    3 class YourController extends Controller {
    4         use BrandsTrait;
    5 
    6         public function addProduct() {
    7             $brands = $this->brandsAll();
    8         }
    9 }

    这是我的 BrandsTrait.php

     1 <?php
     2 namespace AppHttpTraits;
     3 
     4 use AppBrand;
     5 trait BrandsTrait {
     6     public function brandsAll() {
     7         // 从品牌表中获取所有品牌.
     8         $brands = Brand::all();
     9 
    10         return $brands;
    11     }
    12 }

    甚至, 如果您在模型中找到另一种与产品和品牌相互作用有关的通用方法,那么将代码写在该 trait 是个不错的选择。

  • 相关阅读:
    制作USB系统盘
    01Mysql 配置方法
    Tec_010_怎样看K线图
    回顾5年内的央行加息历史
    推荐:微软下一代操作系统Windows 7版本详解
    关于USB启动盘制作
    Delphi Program test
    圣诞节 玩具
    敏捷宣言
    [转 TDD] 如何坚持TDD:使用者出现的问题以及解决方案
  • 原文地址:https://www.cnblogs.com/a609251438/p/11858108.html
Copyright © 2011-2022 走看看