Зачем нужен контейнер если php умирает?
Пишем код, кода становится много, его нужно обслуживать и бороться со сложностью, также нужно тщательно тестировать, тк деньги и надежность пользователей↓
Чтобы тестировать методы класса и не зависеть от реализации -- соблюдается принцип инверсии зависимостей (и некоторые другие)↓
Инверсия зависимостей -- нужно помнить и держать зависимости к нашему классу где-то и сам конкретный сервис наполнять нужно этими зависимостями, руками делать этонакладноtry {
    echo
        (new PurchaseOrder(
            new LocalOrderStorage(
                new NullOrderStorage()
            ),
            new OrderId($inputParams['order_id'])
        ))
            ->newInvoice(
                new InvoiceNumber(
                    new Vendor(
                        new LocalVendorStorage(),
                        new VendorId($inputParams['vendor_id'])
                    ),
                    new VendorInvoiceNumber($inputParams['vendor_invoice_number']),
                    new DateTime($inputParams['date_time'])
                ),
                new VendorInvoiceNumber($inputParams['vendor_invoice_number']),
                new DateTime($inputParams['date_time']),
                new InvoiceAmount(
                    new Amount($inputParams['amount']),
                    new Currency($inputParams['currency'])
                )
            )
                ->json()
    ;
} catch (Exception $exception) {
    return
        (new ErrorResult())
            ->json($exception->getCode(), $exception->getMessage())
        ;
}Кроме того появляется куча параметров в проекте.↓
На помощь приходит паттерн Dependency Injection Container (Service Container), который за нас это делает и всасывает в себя эту заботу, а мы продолжаем писать код и делать это быстро, доставляя  features for customers
Это опциональное поведение, может  и не умирать. См. ReactPHP