我非常喜欢“选项数组”的设计模式。如果 PHP 支持 Python 的参数扩展,那么我会同意使用长参数列表。但我只是发现foo(1, 2, 'something', true, 23, array(4), $bar);
它真的不可读。当需要设置超过 3 或 4 个参数时,我通常会使用数组...
我建议“清理”构造函数是创建一个受保护的方法来访问配置变量(最好在基类中):
abstract class Configurable {
protected $options = array();
protected $requiredOptions = array();
public function __construct(array $options = array()) {
$this->options = $options;
foreach ($this->requiredOptions as $option) {
if (!isset($this->options[$option])) {
throw new InvalidArgumentException('Required argument [$'.$option.'] was not set');
}
}
}
protected function _getOption($key, $default = null) {
return isset($this->options[$key]) ? $this->options[$key] : $default;
}
}
然后,在你的类中,你可以重载 requireOptions 数组来定义需要设置的东西
class Foo extends Configurable {
protected $requiredOptions = array(
'db',
'foo',
);
public function __construct(array $options = array()) {
parent::__construct($options);
if ($this->_getOption('bar', false)) {
//Do Something
}
}
}
一件事。 如果您这样做,请记录所需的选项。对于那些跟随你的人来说,这将使生活变得更加轻松。