PHP具体优化对于如果循环中解

0

的问题

在解程序,我需要使用开关/情况下的功能,但请求的参数可以防止我,我用一个uggly如果条件,如:

        $roles = ["ROLE_USER"];

        if ($request->get('isAdmin')) {
            array_push($roles, "ROLE_ADMIN");
        }

        if ($request->get('isFreemium')) {
            array_push($roles, "ROLE_FREEMIUM");
        }

        if ($request->get('isPremium')) {
            array_push($roles, "ROLE_PREMIUM");
        }

        if ($request->get('isExternal')) {
            array_push($roles, "ROLE_EXTERNAL");
        }

        if ($request->get('isVip')) {
            array_push($roles, "ROLE_VIP");
        }

你能不能帮我简化吗?

if-statement loops php switch-statement
2021-11-23 21:07:21
1

最好的答案

1

你可以尝试如下。

$definedRoles = new ArrayObject([
    'Admin',
    'Freemium',
    'Premium',
    'External',
    'Vip',
]);

$roles = new ArrayObject([ 'ROLE_USER' ]);

foreach ($definedRoles as $role) {
    if ($request->get('is' . $role)) {
        $roles->append(strtoupper('role_' . $role));
    }
}

为什么I'm使用 ArrayObject 课吗? 因为它就像一个产率。 不同于一个数组,对象占据存储只对当前入境时申. 因此你的循环占用很少的内存和不负荷的所有条目进入存储器。

把你所有的有效角色入第一阵 $definedRoles. 所有的角色将是迭代和一个如果条件将检查,如果它's $request 对象。 如果是这样,该作用将所附的 $roles 阵列。

2021-11-23 21:36:26

要知道美元的请求-->获得使用5.4不应该再被使用。 symfony.com/blog/...
Cerad

其他语言

此页面有其他语言版本

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................