PHP作為程式語言的一個問題是,您只能有單一繼承。這意味著一個類別只能從另一個類別繼承。例如,為了防止程式碼重複,最好從兩個不同的類別繼承方法。在PHP 5.4中,加入了一種稱為Traits的語言新特性,並在Laravel框架中廣泛使用。
Trait是一種在單一繼承語言(如PHP)中重複使用程式碼的機制。 Trait旨在透過讓開發人員在生活在不同類別層次結構中的多個獨立類別中自由地重複使用方法集來減少單一繼承的某些限制。 Traits和類別組合的語義以降低複雜性的方式定義,並避免了與多重繼承和Mixins相關的典型問題。
Trait類似於類,但僅用於以細粒度和一致的方式對功能進行分組。無法自行實例化Trait。它是對傳統繼承的補充,可以實現行為的橫向組合; 也就是說,類別成員的應用程式不需要繼承。
什麼是PHP Trait?
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(''); $comment = new Comment; echo $comment->share('');
trait 如何運作?
從上面的範例可以看出,儘管沒有定義該方法,但是物件Post和Comment物件都具有share()可用的方法。
Trait基本上只是一種在運行時「複製和貼上」程式碼的方法。
這表示Trait被複製到Post和Comment類別中,因此當您實例化一個新實例時,share()方法程式碼將可用。
我經常檢查我的程式碼以及如何建立我的程式碼,以便可以快速完成未來的功能添加,並且新專案可以輕鬆擴展以前的想法。
如何在laravel使用trait ?
我在我的Http目錄中建立了一個Trait目錄,其中有一個名為的TraitBrandsTrait.php
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; } }
以上是PHP Laravel中的Trait是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!