动态(标量)在php中投射

时间:2018-06-01 12:25:15

标签: php casting

我需要在string中的类型define中转换值。 目前我用这个:

/**
 * @param mixed $val
 * @param string $type
 *
 * @return bool|float|int|string
 */
protected function castTo($val, $type)
{
    switch ($type) {
        case 'boolean':
        case 'bool':
            return (boolean) $val;
        case 'integer':
        case 'int':
            return (int) $val;
        case 'string':
            return (string) $val;
        case 'double':
        case 'float':
            return (float) $val;
        default:
            return $val;
    }
}

但是你知道一个更好的解决方案(在php 5.6和7+中)吗?

2 个答案:

答案 0 :(得分:1)

使用intval之类的功能等同于获得"动态句柄":

$funcs = ['boolean' => 'boolval', 'integer' => 'intval', 'string' => 'strval', 'float' => 'floatval', ...];

if (!array_key_exists($type, $funcs)) {
    return $val;
} else {
    return call_user_func($funcs[$type], $val);
}

请注意,这可能会比switch更短,但不一定总体更好 ......

答案 1 :(得分:0)

喜欢@deceze解决方案...但直接在phplib中 http://php.net/manual/en/function.settype.php