对于许多框架来说,拥有可以从数组接受配置参数的类是很常见的,但是如果我们可以使用闭包或可调用类,为什么要使用数组呢?
例如:
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');
老实说,可能有很多原因,但对我来说最主要的可能是可读性。闭包很好,有自己的位置,但它们会使快速读取和调试代码的能力成为噩梦。
另一方面,数组是简单、轻量级的,处理它们的所有代码都在对象(封装)中。如果遵循KISS原则,很多程序员可以学到很多东西,生成更容易阅读的代码,而不是开始编写"时髦"的代码。
请记住,其他人可能需要在你之后维护你的代码,或者你可能需要在你写完代码6/12个月后回来时记住你写了什么。当时说得通的东西,你以后可能会觉得陌生!
更不用说在您的特定示例中,如果您稍后添加代码来添加额外的功能,那么该对象的所有初始化代码都会在代码中被打乱。