Symfony中if循环的PHP特定优化
Posted
技术标签:
【中文标题】Symfony中if循环的PHP特定优化【英文标题】:PHP Specific optimization for if loop in Symfony 【发布时间】:2022-01-02 08:31:35 【问题描述】:在 Symfony 应用程序中,我需要使用 switch/case 功能,但请求参数阻止了我,我使用了 uggly if 条件,例如:
$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");
你能帮我简化一下吗?
【问题讨论】:
你可以创建一个关联数组并利用 foreach 循环。 【参考方案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));
为什么我使用ArrayObject
类?因为它已经像收益一样工作了。与数组不同,对象在迭代时只为当前条目占用内存。因此,您的循环占用的内存很少,并且您不会将所有条目都加载到内存中。
将所有有效角色放入第一个数组$definedRoles
。所有角色都将被迭代并检查 if 条件是否在 $request
对象中。如果是这样,角色将被附加到$roles
数组中。
【讨论】:
请注意 $request->get 在 5.4 中已弃用,不应再使用。 symfony.com/blog/…以上是关于Symfony中if循环的PHP特定优化的主要内容,如果未能解决你的问题,请参考以下文章
如何强制为特定 PHP 版本创建新的 Symfony 应用程序?
如何在 LoginListener 中的 onSecurityInteractiveLogin 方法中重定向 - Symfony2