加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

在 PHP 和 Laravel 中引用 Traits的方法

发布时间:2022-06-25 11:04:55 所属栏目:PHP教程 来源:互联网
导读:Trait 是单继承语言(如 PHP )中的一种代码复用机制,这篇文章主要介绍了在 PHP 和 Laravel 中使用 Traits的方法,需要的朋友可以参考下。 事实上,PHP 作为一门编程语言存在的问题之一,就是你只能使用单继承。这意味着一个类只能从另一个类中继承。例如
  Trait 是单继承语言(如 PHP )中的一种代码复用机制,这篇文章主要介绍了在 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呢?
 在 PHP 和 Laravel 中引用 Traits的方法
  首先我在项目的 Http 目录下创建一个Traits文件夹,并且新建了一个名叫 BrandsTrait.php 的Trait文件
 
  使用它就像这样:
 
  use AppHttpTraitsBrandsTrait;
  
  class YourController extends Controller {
      use BrandsTrait;
        
      public function addProduct() {
        $brands = $this->brandsAll();
      }
  }
  这是我的 BrandsTrait.php
 
  <?php
  namespace AppHttpTraits;
  use AppBrand;
  trait BrandsTrait {
    public function brandsAll() {
      // 从品牌表中获取所有品牌.
      $brands = Brand::all();
        
      return $brands;
    }
  }
  甚至, 如果您在模型中找到另一种与产品和品牌相互作用有关的通用方法,那么将代码写在该 trait 是个不错的选择。
 
 

(编辑:PHP编程网 - 黄冈站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读