PHP Symfony中if循环的具体优化
PHP Specific optimization for if loop in Symfony
在 Symfony 应用程序中,我需要使用 switch/case 函数,但请求参数阻止了我,我使用了一个丑陋的 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");
}
你能帮我简化一下吗?
您可以尝试以下方法。
$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
class?因为它已经像产量一样工作了。与数组不同,对象在迭代时只为当前条目占用内存。因此,您的循环占用的内存很少,并且您不会将所有条目加载到内存中。
将所有有效角色放入第一个数组$definedRoles
。所有角色都将被迭代,并且 if 条件将检查它是否在 $request
对象中。如果是这样,该角色将附加到 $roles
数组。
在 Symfony 应用程序中,我需要使用 switch/case 函数,但请求参数阻止了我,我使用了一个丑陋的 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");
}
你能帮我简化一下吗?
您可以尝试以下方法。
$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
class?因为它已经像产量一样工作了。与数组不同,对象在迭代时只为当前条目占用内存。因此,您的循环占用的内存很少,并且您不会将所有条目加载到内存中。
将所有有效角色放入第一个数组$definedRoles
。所有角色都将被迭代,并且 if 条件将检查它是否在 $request
对象中。如果是这样,该角色将附加到 $roles
数组。