رابط‌ها و Traits

استفاده از Interface برای قرارداد و Trait برای بازاستفاده کد در شیءگرایی PHP

رابط (Interface) چیست؟

رابط (Interface) یک قرارداد است — کلاسی که آن را پیاده‌سازی می‌کند، باید متدهای تعریف‌شده را داشته باشد.

<?php
interface Animal {
    public function makeSound();
    public function move();
}

class Dog implements Animal {
    public function makeSound() {
        return "هاپ هاپ!";
    }

    public function move() {
        return "دویدن";
    }
}

class Bird implements Animal {
    public function makeSound() {
        return "چیک چیک!";
    }

    public function move() {
        return "پرواز";
    }
}
?>
تفاوت Interface با Abstract Class: یک کلاس می‌تواند چند Interface را پیاده‌سازی کند، اما فقط از یک کلاس ارث‌بری کند.

Trait چیست؟

Trait روشی برای بازاستفاده کد در زبان‌هایی است که ارث‌بری چندگانه ندارند (مثل PHP).

<?php
trait Logger {
    public function log($message) {
        echo "[LOG] $message<br>";
    }
}

trait Timestamps {
    public $createdAt;
    public $updatedAt;

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

class User {
    use Logger, Timestamps;

    public $name;

    public function __construct($name) {
        $this->name = $name;
        $this->setCreatedAt();
        $this->log("کاربر {$this->name} ساخته شد");
    }
}

$user = new User("علی");
echo "ساخته شده در: " . $user->createdAt;
?>

تفاوت Interface و Trait

ویژگیInterfaceTrait
هدفقرارداد (تعریف متدها)بازاستفاده کد (پیاده‌سازی)
پیاده‌سازیندارد — فقط تعریفدارد — کد آماده
چندگانه✅ چند Interface✅ چند Trait

این مبحث بخشی از دوره آموزش کامل PHP است.

ابزارهای مرتبط