If we dig deeper into the core code of Laravel, we can see various types that are not that common, for example, iterable and callable. Now let’s take a look at those and see what are they exactly.
Iterable
The iterable pseudo-type was introduced in PHP 7.1. An iterable value can be an array or an object that implements the `Traversable` interface. It means, foreach can be used on both types and their values can be used with yield inside of a generator instance.
Iterable is a dynamic type. Using the Traversable interface, any object can be “converted” to iterable.
/** * Loop through on the iterable item. * * @param iterable $data * @return iterable */ function each(iterable $data): iterable { foreach ($data as $value) { // } return $data; }
Callable
The hint `callable` is also another type that can be various things. It can be a callback, a named function, object method – even static class methods as well. It’s important to see, callable is different from Closure.
/** * Loop through on the iterable item and fire the given callback. * * @param iterable $data * @param callable $callback * @return callable */ function each(iterable $data, callable $callback): iterable { foreach ($data as $value) { $callback($value); } return $data; }
Summary
Small pieces of information – and making small experiments – can help quite much to understand more and more about how things work. For example, Laravel is using a lot of these types to keep things in a good flow, yet keep control over the consistency. It’s nice to dig a bit deeper, read the docs to have a bit more light in the room.