进行多次检查时设置单个变量的最佳方法是什么?必须有一些有效、精确、非冗余、可读的方法来做到这一点?
我很少使用 Switch 语句,因为我发现它们非常多余,每次检查通常会占用 3-4 行,而您通常可以通过简单的 1-2 行检查来逃避,随着您进行更多检查,这些语句会加起来。
我刚刚读到 Switch 语句与 if/elseif/else 块相比更具可读性,我可以看到由于对齐而更具可读性。
我喜欢使用三元语句,因为它允许您使用单个变量声明,而不是编写冗余代码,但对我来说,switch 语句似乎过于冗余加上它的代码(行消耗)开销。
入侵枚举
class eUserType
{
const Normal = 0;
const Admin = 1;
const Moderator = 2;
}
如果否则如果如果
if ($userType == eUserType::Normal)
$info = "Normal User";
elseif($userType == eUserType::Admin)
$info = "Admin User";
elseif($userType == eUserType::Moderator)
$info = "Moderator User";
else
$info = false;
转变
switch($userType)
{
case eUserType::Normal:
$info = "Normal User";
break;
case eUserType::Admin:
$info = "Admin User";
break;
case eUserType::Moderator:
$info = "Moderator User";
break;
default:
$info = false;
}
三元
我以前从未写过这样的三元组,并在上面使用了我自己的空白。它看起来精确而高效,但我仍然觉得这非常多余:“$userType == eUserType::”。另外,我假设大多数 IDE 不会很好地处理代码的自动缩进,因为我没有(PHPStorm)。
$info = $userType == eUserType::Normal ?
"Normal User" :
$userType == eUserType::Admin ?
"Admin User" :
$userType == eUserType::Moderator ?
"Moderator User" : false;
我假设我应该将它包装到一个函数/方法中,返回 $info 而不在乎函数内部有什么?
我想知道是否有一些很棒的方法可以做这样的事情,我还没有见过。
最终,我认为我正在寻找的是三元的单变量设置与 switch 语句的单变量检查的混合体。(怀疑它是否存在,但为什么不问呢?)
编辑:我知道如果遵循严格的模式,肯定有一种方法可以使用反射使此代码动态化,但我使用设置为 $info 的数据作为简单的示例数据,而不是我正在使用的复杂对象。我想我最终会将这些检查扔到用户类中,以实现任何可能的可重用性。