<?php namespace App\Service; use App\Controller\AddressBook; class Container { // caveat: Classes are always instantiated // No autowiring (yet, maybe later, but it might fit for a demo) private Template $template; private AddressBook $addressBook; private Router $router; public function __construct() { $this->template = new Template(templateDir: dirname(path: __DIR__, levels: 2) . '/templates/'); $this->addressBook = new AddressBook(template: $this->template); $this->router = new Router(); } public function get(string $className): object { return match ($className) { 'App\Controller\AddressBook' => $this->addressBook, 'App\Service\Router' => $this->router, //default => throw new Exception(message: "Missing class definition: $class") default => die("Missing class definition: $className") }; } }