【问题标题】:Geenrate Method Call from string PHP从字符串 PHP 生成方法调用
【发布时间】:2018-12-04 12:03:18
【问题描述】:

我的 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];

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

这可能吗?

【问题讨论】:

  • 你想把一段字符串当作PHP代码,看看here
  • 我想了解您要解决什么问题?您是否有想要更改的当前 switch/case 代码示例并解释一下为什么需要更改它?
  • @MagnusEriksson 我认为您之前删除的评论非常完美。编辑:就我而言,这应该是被接受的答案。
  • 这看起来像从你的类常量直接映射到用户角色常量更有意义,当你实际解决它时只需调用isGranted 方法。跨度>

标签: php switch-statement cyclomatic-complexity


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-25
    • 2023-03-06
    • 1970-01-01
    • 2022-11-10
    • 1970-01-01
    • 2012-07-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多