I believe this concept is called class name resolution. The example usage you have given looks very much like a definition for a Dependency Injection Container.
With a DI Container, you list your definitions in an array format, like the code you have given, and then when you need the defined class, all of your injections are automatically resolved.
For example, say you have a DI container with the following definitions:
$containerDefinitions = [
Database\DatabaseAccessorInterface::class => Database\ConcreteDatabaseAccessor::class,
Data\QueryExecutionHandlerInterface::class => Data\ConcreteQueryExeuctionHandler::class
];
...and then you have the class ConcreteQueryExeuctionHandler
constructor defined like so:
public function __construct(DatabaseAccessorInterface $databaseAccessor)
{
$this->databaseAccessor = $databaseAccessor;
}
...well, when you retrieve the definition QueryExecutionHandlerInterface
from the DI container, with something like this:
$queryExecutionHandler = $container->get(Data\QueryExecutionHandlerInterface::class);
...then it will auto-inject the ConcreteDatabaseAccessor
during construction of ConcreteQueryExecutionHandler
.
This is a very specific example, but I believe the code you have provided is a DI container definition array.