رابطها و 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
| ویژگی | Interface | Trait |
|---|---|---|
| هدف | قرارداد (تعریف متدها) | بازاستفاده کد (پیادهسازی) |
| پیادهسازی | ندارد — فقط تعریف | دارد — کد آماده |
| چندگانه | ✅ چند Interface | ✅ چند Trait |
این مبحث بخشی از دوره آموزش کامل PHP است.