Trait — Code Reuse Tanpa Inheritance
Di PHP, satu class hanya bisa extends satu parent class. Ini disebut single inheritance. Lalu bagaimana kalau kamu punya logika yang ingin dibagikan ke banyak class yang tidak saling berhubungan?
Jawabnya: Trait.
1. Masalah yang Dipecahkan Trait
Bayangkan kamu punya 3 class yang tidak ada hubungan inheritance, tapi semua butuh fitur "created_at" dan "updated_at":
Kode yang sama copy-paste 3 kali — melanggar prinsip DRY (Don't Repeat Yourself).
2. Solusi: Trait
Trait adalah "potongan kode" yang bisa di-tempelkan ke class manapun menggunakan keyword use:
Trait itu seperti stiker kemampuan yang bisa ditempel ke objek apapun. Stiker "Bisa Terbang" bisa ditempel ke Superman, Burung, atau Pesawat — mereka tidak perlu saling berhubungan.
3. Multiple Traits
Satu class bisa menggunakan banyak Trait sekaligus:
4. Trait vs Interface vs Abstract Class
Kapan Pakai Apa?
5. Contoh Realistis: Sistem Blog
:::tip Di Laravel Nanti... Beberapa Trait bawaan Laravel yang paling sering dipakai:
SoftDeletes— Hapus data tanpa benar-benar menghapus dari databaseHasFactory— Membuat data dummy untuk testingNotifiable— Kirim notifikasi (email, SMS, Slack)HasApiTokens— Autentikasi API dengan token :::
Latihan
- Buat trait
Loggabledengan methodlog(string $message): voidyang menyimpan pesan ke array$logs - Buat trait
Cacheabledengan methodcache(string $key, mixed $value): voiddangetCache(string $key): mixed - Buat class
ProductServiceyang menggunakan kedua trait tersebut - Buat 5 log entry dan 3 cache entry, lalu tampilkan semuanya
Selanjutnya
Sekarang kamu bisa berbagi kode antar class dengan elegan. Lanjut ke Namespace & Autoloading → untuk belajar cara mengorganisasi ratusan class tanpa konflik nama.