Interfaces and traits

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