如果我在 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 秒(100 万次重复为 0.05 秒)。
所以不应该考虑性能差异。