使用案例变量和开关功能?

asl*_*lum 6 php case switch-statement

在PHP中,我想这样做:

switch (function_foo($bar,$bar2)) {
case $fu:
    *Do Stuff*
    break;
case $fubar:
    *Do Other Stuff*
    break;
}
Run Code Online (Sandbox Code Playgroud)

这是一个糟糕的主意吗?它会起作用吗?

Pas*_*TIN 9

使用中的函数switch是OK:函数将被调用,并将返回一个值 - 这将是用于案例的值.

它和写作完全一样:

$my_var = function_foo($bar,$bar2);
switch ($my_var) {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

即使我更喜欢使用变量,所以代码更容易阅读.


并且使用变量case是你经常看不到的东西; 但它也可以正常工作;-)

引用手册页switch:

case表达式可以是任何求值为简单类型的表达式,即整数或浮点数和字符串.

所以,你的代码将工作,只要$fu$fubar含有简单类型的值.


使用变量作为一个case不常用的值(据我所知,从我读过的代码中可以看出),可能是因为其他一些语言不允许这样做(例如,C不允许这样做;并且switch/ case结构被借用了)来自C) ; 但它有效:

$a = 1;
$b = 2;
switch (1) {
    case $a: echo 'a'; break;
    case $b: echo 'b'; break;
}
Run Code Online (Sandbox Code Playgroud)

将输出:

a
Run Code Online (Sandbox Code Playgroud)