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.