---
# System prepended metadata

title: Laravel Trait
tags: [laravel, "Provider &&\_Trait && Facades"]

---

# Laravel Trait

### Trait 說明
:::info
Trait 是一種代碼重用機制，允許在多個類之間共享方法集合，以解決單一繼承模型的局限性。 Trait 被視為一種水平方式的代碼復用，不同於類繼承的垂直方式。

在 Laravel 框架中，Trait 用於向類中註入特定功能，而不需要通過類繼承的方式。這使得代碼更加模塊化、可維護和靈活。 Laravel 中的一些內置 Trait 用於添加常見的功能，如身份驗證、授權、事件觸發等。
:::

### 特點
:::info
1. 代碼復用：Trait 允許將一組方法添加到多個類中，從而避免了代碼重複。

2. 方法注入：通過將 Trait 引入類中，類可以獲得 Trait 中定義的方法。

3. 多重繼承：類可以使用多個 Trait，從而在不同類之間共享不同的功能。

4. 衝突解決：當多個 Trait 中存在相同方法時，類需要使用別名來解決命名衝突。
:::

### 使用說明
:::info
```php=
use Illuminate\Auth\Authenticatable;

class User implements Authenticatable // 透過 implements 接口聲明定義 User 中須使用 Authenticatable 類中所有的方法
{
    use Authenticatable; // 透過添加 Trait Authenticatable 將所有 Authenticatable 類的方法引入

    // 其他属性和方法...
}

```
:::

### 使用範例
:::info
Trait 提供了一種解決多繼承限制的方法，可以在不同類之間共享代碼，同時保持類繼承的簡單性。

```php=
trait Loggable {
    public function log($message) {
        // 紀錄
        echo "Logging: $message\n";
    }
}

class User {
    use Loggable;

    public function updateUserProfile() {
        // 更新用戶資料
        $this->log("User profile updated");
    }
}

class Order {
    use Loggable;

    public function placeOrder() {
        // 下訂單
        $this->log("Order placed");
    }
}

$user = new User();
$order = new Order();

$user->updateUserProfile(); // 輸出：Logging: User profile updated
$order->placeOrder(); // 輸出：Logging: Order placed

```
:::










###### tags: `Provider && Trait && Facades` `laravel`