从字符串PHP进行Geenrate方法调用

时间:2018-12-04 12:03:18

标签: php switch-statement cyclomatic-complexity

我在switch case语句中存在圈复杂性问题,因此我需要重构switch / case代码块。

我试图创建一个包含键和值的数组,以设置方法调用 即$ this-> authChecker-> isGranted(User :: ROLE_ADMIN)

$attributeResolver = [
            self::OPEN_FORM => '$this->authChecker->isGranted(User::ROLE_USER)',
            self::CREATE => '$this->authChecker->isGranted(User::ROLE_ADMIN)',
            self::EDIT => '...',
            self::DISABLE => '...',
        ];

然后打电话使用类似的东西

return $attributeResolver[$attribute];

我想将方法​​调用存储在字符串中,以避免不必要的服务调用。

这可以吗?

1 个答案:

答案 0 :(得分:3)

您想到了一个解决方案,而您正在询问该解决方案。这称为XY问题,这使得很难找到有关主要问题的答案。根据当前的要求(可能不够精确),您可能希望像这样重新构建$attributeResolver

$attributeResolver = [
    self::OPEN_FORM => User::ROLE_USER,
    self::CREATE => User::ROLE_ADMIN,
    .
    .
    .
];

并在返回时按如下所示调用isGranted方法:

return $this->authChecker->isGranted($attributeResolver[$attribute]);