In PHP, traits are a mechanism for code reuse that lets you share methods between multiple unrelated classes without using inheritance.
How Traits Work
A trait is like a partial class that contains methods (and sometimes properties) you want to reuse in multiple classes.
You cannot instantiate a trait on its own — instead, you import it into a class using the use keyword.
Example:
trait Logger {
public function log($message) {
echo "[LOG]: $message\n";
}
}
class User {
use Logger;
public function createUser() {
$this->log("User created");
}
}
class Product {
use Logger;
public function addProduct() {
$this->log("Product added");
}
}
$user = new User();
$user->createUser();
$product = new Product();
$product->addProduct();
Why Traits Are Needed
PHP does not support multiple inheritance.
This means a class can only extend one other class.
Problem:
If you have shared logic (like logging, caching, or authentication) that multiple classes need, you can’t simply inherit from multiple parent classes.
Solution:
Traits let you inject those common methods into any number of classes, without affecting the class hierarchy.
Key Points About Traits
- Multiple traits can be used in the same class:
use TraitA, TraitB; - Conflict resolution
If two traits have the same method name, you can choose which one to use:use TraitA, TraitB { TraitA::methodName insteadof TraitB; TraitB::methodName as methodFromB; } - Traits can have properties (though it’s less common):
trait HasName { public $name; } - Traits can call other methods in the class they’re used in.
✅ When to Use Traits
- When you want to share common methods between unrelated classes.
- When you don’t want to force inheritance.
- For mix-in behavior like logging, validation, caching, authentication, etc.
