处理数组中混合变量类型的值转换的更好方法,PHP

时间:2012-03-07 23:01:24

标签: php arrays

我正在使用一个[通常没有广泛使用的] 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));
    }
}

有人会考虑这个替代方案,我建议不好的做法,还有人会建议其他选择吗?

1 个答案:

答案 0 :(得分:1)

不,它看起来不错,因为在这两种情况下,字段的名称都不会提升到该类的外部 - switcharray_key_exists。所以这个应该没有任何区别,因为你在内部(私下)解决它是不可见的。

在更改之前和之后运行您的单元测试,看看是否一切顺利。