如何在 PHP 和 Laravel 中使用 Traits

文章轉發自專業的Laravel開發者社區,原始連接:learnku.com/laravel/t/3…php

事實上,PHP 做爲一門編程語言存在的問題之一,就是你只能使用單繼承。這意味着一個類只能從另外一個類中繼承。例如,可能但願從幾個不一樣的類繼承方法,以防止代碼重複。在 PHP 5.4 中 一個新的語言特性被添加進來,這就是衆所周知的 Traits,它在 Laravel 框架中被普遍使用。laravel

PHP 官方網站給出了 Traits 的定義,以下:編程

「 Trait 是單繼承語言(如 PHP )中的一種代碼複用機制。 Trai 的目的是減小單繼承語言的一些限制,能讓開發者自由的重用在不一樣的類層次結構下幾個獨立類中的方法。 Trait 的語義組合與類的定義在某種程度上減小了代碼的複雜度,避免了與多繼承和 Mixins 相關的一些典型問題。bash

Trait 與類很是類似,但它的目的僅僅是用更好、一致的方式匯聚一些方法。 Trait 自己不能被實例化。除了傳統繼承以外,它能水平組合行爲,換言之,類的應用程序不須要繼承。」框架

PHP Traits是什麼?

Trait 是一組簡單的包含在另外一個類中的方法。 Trait 就像一個抽象類同樣,沒法單獨實例化。編程語言

一個 Trait 示例就像下面這樣:post

trait SharePost {

  public function share($item)
  {
    return 'share this post';
  }

}
複製代碼

而後,您能夠在其餘類中這樣使用 Trait :網站

class Post {

  use SharePost;

}

class Comment {

  use SharePost;

}
複製代碼

如今,若是您要從這些類中建立新對象,您會發現它們均可以使用 share()方法:ui

$post = new Post;
echo $post->share(''); // 'share this post' 

$comment = new Comment;
echo $comment->share(''); // 'share this post'
複製代碼

Traits 如何工做 ?

從上面例子能夠看到, 儘管 Post 和  Comment 自己沒有定義方法,可是他們能夠調用  share() 方法。this

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 是個不錯的選擇。