事實上,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 如何作業 ?
從上面例子可以看到, 盡管 Post 和 Comment 本身沒有定義方法,但是他們可以呼叫 share() 方法,
Trait 是運行時 「復制和粘貼」 代碼的一種方式.
這意味著 Trait 被復制到 Post and Comment ,因此當你實體化一個新實體, 可以直接呼叫 share() 方法,
我會定期檢查我的代碼以及如何構造新代碼,目的是為了將來可以快速構建新功能,并且可以輕松的開啟新專案,
那么,怎樣在laravel中使用traits呢?
首先我在專案的Http 目錄下創建一個Traits檔案夾,并且新建了一個名叫 BrandsTrait.php 的Trait檔案
使用它就像這樣:
1 use App\Http\Traits\BrandsTrait; 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 App\Http\Traits; 3 4 use App\Brand; 5 trait BrandsTrait { 6 public function brandsAll() { 7 // 從品牌表中獲取所有品牌. 8 $brands = Brand::all(); 9 10 return $brands; 11 } 12 }
甚至, 如果您在模型中找到另一種與產品和品牌相互作用有關的通用方法,那么將代碼寫在該 trait 是個不錯的選擇,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/114441.html
標籤:PHP
上一篇:c++順序查找,的一些問題
下一篇:檔案操作
