Learn
← Previous Next →

Hari 12: Trait — Reuse Kode

55 min Last updated 09 Apr 2026

Apa itu Trait?

Trait adalah mekanisme untuk berbagi method antar class tanpa inheritance. PHP tidak mendukung multiple inheritance, tapi bisa menggunakan banyak trait.

trait HasTimestamps {
    private string $createdAt;
    private string $updatedAt;

    public function setCreatedAt(): void {
        $this->createdAt = date("Y-m-d H:i:s");
    }

    public function getCreatedAt(): string {
        return $this->createdAt ?? "belum diset";
    }
}

trait HasSlug {
    public function generateSlug(string $judul): string {
        return strtolower(str_replace(" ", "-", $judul));
    }
}

class Post {
    use HasTimestamps, HasSlug;  // bisa pakai banyak trait

    public string $judul;

    public function __construct(string $judul) {
        $this->judul = $judul;
        $this->setCreatedAt();
    }

    public function getSlug(): string {
        return $this->generateSlug($this->judul);
    }
}

$post = new Post("Belajar PHP Trait");
echo $post->getSlug() . "\n";     // belajar-php-trait
echo $post->getCreatedAt() . "\n"; // (tanggal sekarang)
💡 Trait cocok untuk kode yang dipakai banyak class berbeda yang tidak memiliki hubungan inheritance logis.

💡 Notice: Trait mirip "copy-paste" method ke dalam class. Gunakan "use TraitName;" di dalam class.

Assignment

Buat trait Logger dengan method log(string $msg): void yang mencetak "[LOG] $msg". Buat class App dan class Database yang keduanya use Logger. Buat instance keduanya dan panggil log() dengan pesan berbeda.

Expected output:

[LOG] Aplikasi dimulai
[LOG] Koneksi berhasil
PHP index.php
Solution
Output