class UserCollection { /** @var User[] */ private array $items = []; public function add(User $user): void { $this->items[] = $user; } public function all(): array { return $this->items; } }
Now let's slow everything down — really down — and explain every new symbol, keyword, and idea.
1. class UserCollection { ... }
This defines a new class named UserCollection (any name).
Think of it as: “a special box designed to hold many User objects”.
It's not a user.
It's not an entity.
It's not a value object.
It's a collection — a group of things that belong together.
2. /** @var User[] */ — the docblock annotation
This is a hint for humans and tools.
It says:
“Inside this property, we expect an array of User objects”.
It doesn't change how PHP runs.
It helps:
It's a label on the box saying:
“This box contains Users”.
3. private array $items = [];
This line introduces several new ideas:
private
This means:
“Only this class can touch this property”.
No one outside the collection can directly modify $items.
This protects the collection from accidental misuse.
array
This is the type.
It tells PHP:
“This property must always be an array”.
$items
This is the actual property name — the internal storage.
= [];
This initializes the property as an empty array.
So the whole line means:
"Inside this collection, keep a private array named $items, starting empty".
4. public function add(User $user): void { ... }
This is a method — a small action the collection can perform.
Let's break it down:
public — Anyone can call this method.
function add(…)
The method is named add — meaning “add something to the collection”.
User $user
This is a typed parameter.
It means:
“You must pass a User object here. Nothing else is allowed”.
This is where type safety begins.
: void
This means:
“This method does not return anything”.
It performs an action but gives nothing back.
5. $this->items[] = $user;
This is the heart of the method.
Let's break it down:
$this
Means: “the current object we're inside”.
In our metaphor: “this box”.
→items
Means: “open the box and look at the $items property inside”.
[] = This is PHP's way of saying: “append this item to the end of the array”.
$user
The object we're adding.
So the whole line means:
"Open this collection's internal array and append the user to it".
6. public function all(): array { ... }
This method returns the entire collection.
public
Anyone can call it.
all()
A simple, readable name meaning: “give me everything”.
: array
This method returns an array.
return $this→items;
Give back the internal list.
So the method means:
"Return the full list of users stored inside this collection".
—-
Here's the whole class in plain English: