我使用的是一个[通常不广泛使用]的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));
}
}
有人会考虑我建议的这种糟糕做法吗?此外,有人会建议其他选择吗?
不,这看起来不错,因为在switch
或array_key_exists
这两种情况下,字段的名称都没有提升到该类的外部。所以这个应该没有任何区别,因为你在内部(私下)解决了它,这是不可见的。
在更改前后运行单元测试,看看是否一切顺利。