Interfaces advanced
| Segregate | |
| Extend interfaces | |
| Interface constants | |
| Countable showcase |
Segregate
Small focused interfaces beat one giant list. Each interface covers a single skill that a class may or may not need.
Classes then use only the parts they need. Tests stay simple because each promise is easy to fake.
interface Readable { public function read(): string; } interface Writable { public function write(string $text): void; }
Extend interfaces
Interfaces extend other interfaces with the same extends keyword classes use. The child interface bundles every parent promise into one name.
A class that uses the child name must fill in all parents too. One name then stands for the full set.
interface Store extends Readable, Writable { } class Memory implements Store { public function read(): string { return "hi"; } public function write(string $text): void { } }
Interface constants
Interfaces may hold constants that every user shares. Status codes and default limits are typical guests there.
Read them through the interface name or through the class name. Both spellings reach the same value.
interface Http { const OK = 200; } echo Http::OK;
Countable showcase
The Countable interface lets count work on your object. It asks for a single count method in return.
Return the item total from that method. Client code then calls count on the object like on a plain array.
class Bag implements Countable { public array $items = []; public function count(): int { return count($this->items); } }
Next: Exceptions advanced
Article author: Arthur Isaev