「オプション配列」のデザインパターンがとても気に入っています。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
}
}
}
ひとこと。 これを行う場合は、必要なオプションを文書化してください。あなたをフォローしてくれる人たちの生活がずっと楽になります。