我最近看到Matthew Weier O'Phinney(ZF 项目负责人)的一篇文章,其中包含与此类似的示例代码:
class User
{
protected $_data = array(
'username' => null,
'email' => null,
'fullname' => '',
'role' => 'guest',
);
/* ... */
}
注意传统上四个不同的成员变量是如何合并到一个数组中的。我可以看到干净的构造函数(只有一个参数)的好处,但我怀疑 IDE 是否能够很好地在$_data
数组上进行自动完成。
我能想到的另一种选择是使用魔术方法来创建一个带有单个参数和四个成员的构造函数。
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;
}
}
第二个代码块似乎更好......但是我怀疑我能写出比 O'Phinney 先生更好的代码。处理类成员的最佳方式是什么,同时仍保持与构造函数的干净接口?