Menu

Thursday, March 19, 2020

[PHP - Laravel] Trait คืออะไร?
[PHP - Laravel] What is Trait?

ปัญหานึงของการเขียนโปรแกรมด้วยภาษา PHP คือ class 1 class สามารถ inherit จาก class อื่นได้เพียง class เดียวเท่านั้น (single inheritance) ทำให้ไม่สามารถ inherit method ที่ต้องการใช้จาก class อื่นๆ เพื่อลดความซ้ำซ้อนของโค้ดได้

Traits เป็นกลไกสำหรับการใช้ code ซ้ำในภาษาที่เป็น single inheritance เช่น PHP

Traits มีความคล้ายคลึงกับ class ต่างกันที่ Traits เป็นเพียงกลุ่มของ method เท่านั้น จึงไม่สามารถเรียกใช้งานแบบ instance ได้ นอกจากนั้น มันยังมีความสามารถเพิ่มเติม คือ การเรียกใช้ class member ของ class ที่เรียกใช้มันได้ โดยไม่ต้อง inherit อีกด้วย


ตัวอย่างการใช้งาน

สมมติว่า เราสร้าง Traits ชื่อ Sample.php ขึ้นมาที่ app/Traits ของโปรเจคเรา โดยมีโค้ดดังนี้
<?php

namespace App\Traits;

trait Sample
{
    public static function printClass(){
        echo __CLASS__;
    }
}
แล้วเรานำ traits นี้ไปเรียกใช้ใน User และ Admin Models ดังนี้
  • User Model มีโค้ดดังนี้
  • <?php
    namespace App\Models;
    
    use Illuminate\Database\Eloquent\Model;
    use App\Traits\Sample;
    
    class Users extends Model
    {
        use Sample;
    }
    
  • Admin Model มีโค้ดดังนี้
  • <?php
    namespace App\Models;
    
    use Illuminate\Database\Eloquent\Model;
    use App\Traits\Sample;
    
    class Admin extends Model
    {
        use Sample;
    }
    
หลังจากนั้น ลองเรียกใช้ method ภายใน traits ผ่านทาง Model ทั้ง 2 Model ด้วยโค้ดดังนี้
User::printClass();
Admin::printClass();
ผลลัพธ์ที่ได้ จะเป็นดังนี้
App\Models\User
App\Models\Admin

No comments:

Post a Comment