Сервис Silex — параметр $ app или & quot; использование ($ app) & quot; заявление?

Если я определю службу в приложении Silex, я могу либо ожидать, что основной контейнер (Приложение) будет передан в качестве параметра, либо взять его из текущей области, используя инструкцию «use ($ app)».

Официальная документация на http://silex.sensiolabs.org/doc/services.html имеет этот фрагмент:

$app['some_service'] = function ($app) {
return new Service($app['some_other_service'], $app['some_service.config']);
};

Но это может быть одинаково написано как

$app['some_service'] = function () use ($app) {
return new Service($app['some_other_service'], $app['some_service.config']);
};

и я видел много примеров такого кода. Это просто личный вкус или одно из них имеет преимущество перед другим, например, в производительности, использовании памяти или изоляции кода?


Редактировать:
Я выполнил сравнение производительности «использование» с параметром против простой функции:

$func = function () use ($app) {...};
$func = function ($app) {...};
function test($app) {...}

Первый самый медленный, но общая разница составляет менее 25%. И как любая микрооптимизация, это заметно только в том случае, если у вас их десятки тысяч, поскольку разница во времени между самым быстрым и самым медленным составляет около 1/10 000 000 тысячных секунды (0,05 с на 1 миллион повторений).

Так что разница в производительности не должна учитываться.

4

Решение

Вот прямой ответ: практической разницы нет. Единственный сценарий, который я вижу, где use ($app) не будет работать, если вы определите некоторые записи в отдельных файлах.

Что следует, просто если вам любопытно;)

Преимущество повторной передачи контейнера в параметрах заключается в том, что он позволяет Silex проходить другой экземпляр контейнера вместо. Silex этого не делает, поэтому не влияет на вас. Но некоторые другие контейнеры делают.

Основная причина для контейнера сделать это, если у вас есть сложная настройка с несколькими контейнерами, которые связаны друг с другом: ParentContainer -> SubContainer, Когда вы определяете запись в SubContainer, вы хотите иметь возможность извлекать зависимости из родительского контейнера (который также будет автоматически искать в подконтейнере). Таким образом, подконтейнер передаст parentcontainer в параметре закрытия.

Это расширенный (и редкий) вариант использования, но интересно знать;)

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]