PHP ক্লাস শুধু একটি parent extend করতে পারে — কোনো multiple inheritance না। একটি trait সেই সীমাবদ্ধতা তৈরি করা নির্দিষ্ট সমস্যাটা সমাধান করে: inheritance দিয়ে একেবারেই সম্পর্কিত না এমন ক্লাস জুড়ে একই method-এর সেট শেয়ার করা।
trait Loggable {
public function log(string $message): void {
echo '[' . date('Y-m-d H:i:s') . '] ' . $message . PHP_EOL;
}
}একটি ক্লাস use দিয়ে একটি trait-এর method টেনে আনে, যেন সেগুলো সরাসরি ক্লাসে লেখা হয়েছে।
class Order {
use Loggable;
public function ship(): void {
$this->log('Order shipped');
}
}
class User {
use Loggable; // একই trait, একটি অসম্পর্কিত ক্লাস
public function register(): void {
$this->log('User registered');
}
}class Order {
use Loggable, Cacheable, Notifiable;
}| Inheritance (extends) | একটি trait (use) |
|---|---|
| "Is-a" সম্পর্ক — একটি Dog একটি Animal | অন্যথায় অসম্পর্কিত ক্লাস জুড়ে একটি শেয়ার করা ক্ষমতা |
| শুধু একটি parent | একসাথে একাধিক trait |
| একটি আসল hierarchy model করে | behavior-এর একটি reusable bundle, কোনো hierarchy না |
Trait behavior বাধ্য করে না
একটি trait method সেটা ব্যবহার করা ক্লাস দিয়ে override করা যায় — দুটোই একই method নাম define করলে ক্লাসের নিজের version সবসময় জেতে।