我正在使用一个[通常没有广泛使用的] PHP框架,我正在使用的类中包含一系列与SQL中的列相关的字段。
好吧,为了设置类对象的值,有一个类方法setFieldValue,通常会这样做:
protected $fields = array('id', 'name', 'body');
function setFieldValue($field, $value) {
switch($field) {
case 'id':
return parent::setFieldValue($field, intval($value));
case 'name':
return parent::setFieldValue($field, strval($value));
case 'body':
return parent::setFieldValue($field, strval($value));
}
}
我正在寻找一些更有活力的东西(而且更干净,因为我会有很多字段),或许像:
protected $fields = array('id' => 'intval', 'name' => 'strval', 'body' => 'strval');
function setFieldValue($field, $value) {
if(array_key_exists($field, $this->fields)) {
return parent::setFieldValue($field, $fields[$field]($value));
}
}
有人会考虑这个替代方案,我建议不好的做法,还有人会建议其他选择吗?
答案 0 :(得分:1)
不,它看起来不错,因为在这两种情况下,字段的名称都不会提升到该类的外部 - switch
或array_key_exists
。所以这个应该没有任何区别,因为你在内部(私下)解决它是不可见的。
在更改之前和之后运行您的单元测试,看看是否一切顺利。