最近、Matthew Weier O'Phinney(ZFプロジェクトリーダー)による記事に出くわしました。この記事には、次のようなサンプルコードが含まれています。
class User
{
protected $_data = array(
'username' => null,
'email' => null,
'fullname' => '',
'role' => 'guest',
);
/* ... */
}
従来は4つの異なるメンバー変数であったものが1つの配列に統合されていることに注目してください。$_data
クリーンなコンストラクター(パラメーターが1つだけ)の利点はわかりますが、IDEが配列でオートコンプリートをうまく実行できるとは思えません。
私が考えることができる1つの代替案は、魔法のメソッドを使用して、単一のパラメーターと4つのメンバーを持つコンストラクターを作成することです。
class User
{
protected $_username = null;
protected $_email = null;
protected $_fullname = '';
protected $_role = 'guest';
public function __construct($data)
{
foreach ($data as $key => $value) {
$this->$key = $value;
}
}
public function __set($name, $value) {
$member = "_$name";
$this->$member = $value;
}
}
コードの2番目のブロックの方が優れているようです...しかし、O'Phinney氏よりも優れたコードを記述できるとは思えません。コンストラクターへのクリーンなインターフェイスを維持しながら、クラスメンバーを処理するための最良の方法は何ですか?