开关改进

时间:2018-07-03 15:54:58

标签: php switch-statement

我有以下开关盒,但目前包含10个条件。

public function convertParameters(string $key, $value)
{
    switch ($key) {
        case "office":
        case "name":
        case "first_name":
        case "last_name":
            $value = ucfirst($value);
            break;
        case "email":
            $value = strtolower($value);
            break;
        case "street":
        case "city":
            $value = ucwords($value);
            break;
        case "start":
        case "end":
            $value = \DateTime::createFromFormat("Y-m-d H:i:s", $value);
            break;
    }
    return $value;
}

有人知道我如何改进此功能,使其条件更少吗? (或其他改进)

1 个答案:

答案 0 :(得分:1)

您的方法看起来不错,但是如果您正在寻找替代方法,则可以使用从键​​映射到函数的数组。

$ops = [
    "office" => "ucfirst",
    "name" => "ucfirst",
    "first_name" => "ucfirst",
    "last_name" => "ucfirst",
    "email" => "strtolower",
    "street" => "ucwords",
    "city" => "ucwords",
    "start" => function($d) { return DateTime::createFromFormat("Y-m-d H:i:s", $d); },
    "end" => function($d) { return DateTime::createFromFormat("Y-m-d H:i:s", $d); }
];

if (isset($ops[$key])) {
    return $ops[$key]($value);
} else {
    return $value;
}