在laravel中,trait是為類似PHP的單繼承語言而準(zhǔn)備的一種代碼復(fù)用機(jī)制,trait用于減少單繼承語言的限制,使開發(fā)人員能夠自由地在不同層次結(jié)構(gòu)內(nèi)獨(dú)立的類中復(fù)用method,可以簡單理解為方便代碼復(fù)用的一種實(shí)現(xiàn)方式。
本文操作環(huán)境:Windows10系統(tǒng)、Laravel6版、Dell G3電腦。
laravel中trait是什么
Trait 是為類似 PHP 的單繼承語言而準(zhǔn)備的一種代碼復(fù)用機(jī)制。Trait 為了減少單繼承語言的限制,使開發(fā)人員能夠自由地在不同層次結(jié)構(gòu)內(nèi)獨(dú)立的類中復(fù)用 method。 Trait 和 Class 組合的語義定義了一種減少復(fù)雜性的方式,避免傳統(tǒng)多繼承和 Mixin 類相關(guān)典型問題。
首先我們得知道如何定義一個(gè) 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 一下,然后當(dāng)自己聲明的一樣去調(diào)用就好了。
這里面其實(shí)有個(gè)優(yōu)先級(jí)的:調(diào)用類 >Trait > 父類
trait SoftDeletes { protected $forceDeleting = false; public static function bootSoftDeletes() { ... } public function forceDelete() { ... } }
trait可以定義屬性和方法
trait 中的 方法名:hasCreator()改為 bootHasCreator 在use時(shí)會(huì)默認(rèn)調(diào)用