Interfaces and traits
| Define an interface | |
| Implement it | |
| Reuse with traits | |
| Interface vs trait vs parent |
Define an interface
An interface lists method names without bodies. It describes what an object can do and hides how it does it.
Keep interfaces small so classes can adopt them without extra weight.
interface HasName { public function name(): string; }
Implement it
A class joins the contract with the implements keyword. It must then define every listed method.
Different classes can implement the same interface in completely different ways.
class Person implements HasName { public function __construct(public string $nick = "Ada") { } public function name(): string { return $this->nick; } }
Reuse with traits
A trait holds ready methods for reuse across unrelated classes. Add it with the use keyword inside a class.
More helpers are shown in the guide on
traits
with string and slug examples.
trait Sluggable { public function slug(string $value): string { return strtolower(trim($value)); } }
Interface vs trait vs parent
Use a parent when classes share one family tree. Use an interface when many different classes promise the same behavior.
Use a trait when the same code body must appear in places with no shared parent.
class Article implements HasName { use Sluggable; public function name(): string { return $this->slug("Hello World"); } }
Next: Enums
Article author: Arthur Isaev