在laravel中,trait是為類似PHP的單繼承語言而準備的一種代碼復用機制,trait用于減少單繼承語言的限制,使開發(fā)人員能夠自由地在不同層次結(jié)構(gòu)內(nèi)獨立的類中復用method,可以簡單理解為方便代碼復用的一種實現(xiàn)方式。
本文操作環(huán)境:Windows10系統(tǒng)、Laravel6版、Dell G3電腦。
laravel中trait是什么
Trait 是為類似 PHP 的單繼承語言而準備的一種代碼復用機制。Trait 為了減少單繼承語言的限制,使開發(fā)人員能夠自由地在不同層次結(jié)構(gòu)內(nèi)獨立的類中復用 method。 Trait 和 Class 組合的語義定義了一種減少復雜性的方式,避免傳統(tǒng)多繼承和 Mixin 類相關(guān)典型問題。
首先我們得知道如何定義一個 Trait, 使用的關(guān)鍵字是 trait
namespace AppTraits; trait HasCreator { }
調(diào)用
namespace App; use AppTraitsHasCreator; use IlluminateDatabaseEloquentModel; use IlluminateDatabaseEloquentSoftDeletes; class Post extends Model { use HasCreator, SoftDeletes; protected $fillable = ['title', 'user_id']; protected static function boot() { parent::boot(); self::hasCreator(); } }
將 Trait 中的方法合并到 模型中去了,要想使用就 use 一下,然后當自己聲明的一樣去調(diào)用就好了。
這里面其實有個優(yōu)先級的:調(diào)用類 >Trait > 父類
trait SoftDeletes { protected $forceDeleting = false; public static function bootSoftDeletes() { ... } public function forceDelete() { ... } }
trait可以定義屬性和方法
trait 中的 方法名:hasCreator()改為 bootHasCreator 在use時會默認調(diào)用