Silex服务-$ app参数还是“use($ app)”语句? - php

如果我在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秒)。

因此,不应考虑性能差异。

参考方案

这是一个直接的答案:没有实际区别。我可以看到use ($app)无效的唯一情况是,如果您在单独的文件中定义了一些条目。

只是在您好奇的情况下,;)

在参数中再次传递容器的优点是,它允许Silex替代传递另一个容器实例。 Silex不会这样做,因此不会影响您。但是其他一些容器也可以。

容器执行此操作的主要原因是,如果您有一个复杂的设置,其中包含多个容器,这些容器是一个又一个地链接在一起的:ParentContainer-> SubContainer。在SubContainer中定义条目时,您希望能够从父容器中获取依赖项(父容器也会自动在子容器中查找)。因此,子容器将在闭包参数中传递parentcontainer。

这是一个高级(很少见)用例,但是很有趣;)

PHP-将日期插入日期时间字段 - php

我已在数据库中使用datetime字段存储日期,使用PHP将“今天的日期”插入该字段的正确方法是什么?干杯, 参考方案 我认为您可以使用php date()函数

php ziparchive类源代码 - php

Improve this question 我如何获取ziparchive类本身的源代码。 参考方案 假设您在谈论PHP ZipArchive class:下载PHP source code并查找适当的文件。如果您希望源代码是PHP代码,您可能会感到失望,因为源代码是用C语言编写的。或者,也可以在PHP Github Development Reposito…

PHP getallheaders替代 - php

我正在尝试从服务器上的apache切换到nginx。唯一的问题是我在PHP脚本中使用的getallheaders()函数,该函数不适用于Nginx。我已经尝试过用户在getallheaders函数上的php站点上提供的注释,但这并不返回所有请求标头。请告诉我如何解决这个问题。我真的想切换到Nginx。 参考方案 您仍然可以使用它,但是您必须像这里一样重新定义…

PHP-如何建议搜索字词,“你是说……?” - php

当使用不检索任何结果的术语搜索数据库时,我想允许“您是不是……”建议(例如Google)。例如,如果有人寻找“ jquyer””,它将输出“ did you mean jquery?”当然,建议结果必须与数据库内部的值匹配(我正在使用mysql)。您知道可以做到这一点的图书馆吗?我已经用谷歌搜索过,但是没有找到任何好的结果。或者,也许您有一个想法,该如何独自…

php:将分钟取整到最近的四分之一小时,然后执行更多操作 - php

最初的问题是这样的:取分钟数->转换为四分之一小时-> 1个四分之一小时为1个单位->输出单位我今天整天都在整理页面,几分钟前我的大脑就停止工作了,我只是不知道如何输出单位数量。我知道在此网站上发布问题会有所帮助。因此,用户输入的分钟数(不是小时和分钟,而是数分钟),站点需要输出单位数量。单位是一个刻钟。分钟总是四舍五入到最近的四分之一小时…