对于许多框架来说,拥有可以接受数组配置参数的类是常见的,但是为什么数组,如果我们可以使用闭包或可调用类?
例如某些路由器服务:
class Router
{
public function __construct(Closure $config)
{
$closure($this);
}
public function addRoute(...$params) {
// some code
}
}
配置/ router.php:
return function($router) {
$router
->addRoute('/')
->setName('home')
;
// and so on....
}
然后在某处:
$router = new Router(include 'config/router.php');
$controller = $router->match('/some/path');
我错过了什么吗?也许我没有足够的经验,但我还没有看到这种方法。
UPD:为了更好地说明我的观点,这里有一个更新版本:
class Router
{
public function configureWith(callable $configurator)
{
$configurator($this);
return $this;
}
public function addRoute(...$params) {
// some code
}
}
class RouterConfigurator
{
public function __invoke($router)
{
$router->addRoute('/');
$router->addRoute('/some');
// and so on....
}
}
$router = new Router;
$router->configureWith(new RouterConfigurator);
$controller = $router->match('/some/path');
答案 0 :(得分:0)
说实话,可能有无数的原因,但对我来说可能主要是可读性。闭包很好并且有它们的位置,但是它们能够快速读取代码并将其调试成为一场噩梦。
另一方面,数组是简单,轻量级的,处理它们的所有代码都在对象中(封装)。
很多程序员可以学到很多东西,如果他们遵循KISS原则就可以生成更容易阅读的代码,并且在编写“时髦”的代码时并没有下载。代码。请记住,其他人可能必须在您之后维护您的代码和/或您可能需要记住您在编写后6/12个月回来时编码的内容。那时候有意义的事情对你来说可能看起来很陌生!
更不用说在您的特定示例中,如果您稍后添加代码以添加其他功能,则该对象的所有初始化代码都会通过代码填充。