Задать вопрос
@a_pussycan
Начинающий веб-программист

Зачем нужен контейнер если php умирает?

Прошу прощения, понимаю, что глупый вопрос, но все же его задам. Возможно просто слишком глубоко думаю.

Вот есть реализация контейнера, который мы берем, чтобы не создавать слишком много экземпляров объектов и тд и тп.

Но есть одно большое НО - Зачем? Я понимаю, если это будет сказано про компилируемые языки типа C, Java, GoLang, но ведь PHP призван выполнить скрипт и умереть, и когда я получил все, что должен был, память обнуляется.
Из-за этого утверждения, не понимаю, зачем нам также нужны статические свойства в объектах - да они не меняются, но в чем большой смысл? если сервер отработал, отдал мне инфу и все, дальше опять по новой.
  • Вопрос задан
  • 1621 просмотр
Подписаться 3 Простой 8 комментариев
Решения вопроса 1
Maksclub
@Maksclub Куратор тега PHP
maksfedorov.ru
Пишем код, кода становится много, его нужно обслуживать и бороться со сложностью, также нужно тщательно тестировать, тк деньги и надежность пользователей

Чтобы тестировать методы класса и не зависеть от реализации -- соблюдается принцип инверсии зависимостей (и некоторые другие)

Инверсия зависимостей -- нужно помнить и держать зависимости к нашему классу где-то и сам конкретный сервис наполнять нужно этими зависимостями, руками делать это
накладно

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
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Immortal_pony
@Immortal_pony Куратор тега PHP
Это опциональное поведение, может и не умирать. См. ReactPHP
Ответ написан
Комментировать
Stalker_RED
@Stalker_RED
PHP призван выполнить скрипт и умереть
можете показать где в документации php это написано?

хинт: нет, не призван, и на php даже демонов пишут иногда)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы