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


Better way to handle value conversion for mixed variable types in an array, PHP

我使用的是一个[通常不广泛使用]的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));
    }
}

有人会考虑我建议的这种糟糕做法吗?此外,有人会建议其他选择吗?

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

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