6

在 PHP 中,我想这样做:

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

这是一个可怕的想法吗?它会起作用吗?

4

4 回答 4

9

在 中使用函数switch是可以的:该函数将被调用,并将返回一个值——该值将用于该案例。

这与写作完全相同:

$my_var = function_foo($bar,$bar2);
switch ($my_var) {
    // ...
}

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


在中使用变量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;
}

将输出:

a
于 2010-03-04T21:25:48.147 回答
2

从未尝试将函数作为参数switch,不确定(您应该尝试一下),但是您可以首先将函数返回值存储在某个变量中并在switch例如:

$return_value = function_foo($bar, $bar2);

switch ($return_value) {
case $fu:
    *Do Stuff*
    break;
case $fubar:
    *Do Other Stuff*
    break;
}
于 2010-03-04T21:24:18.617 回答
1

根据手册,PHPswitch语句就像一系列if/else if语句(如果每个 case 都以 结尾break)。这意味着你的技术应该有效。只要函数名和变量名可读,我想不出有什么问题。

在其他一些语言中,该switch语句实际上是对if/else if语句的性能改进,因此您需要在编译时知道 case 值。它看起来不像 PHP 那样做。

于 2010-03-04T21:25:17.087 回答
1

它可能是的,它被称为 lambda,它们是隐藏函数

$lambda = function($a, $b) {
    return $a * $b;
};


$return_value = function foo($bar, $bar2){ return $logic }

switch ($lambda(2,4)) {
case $fu:
    *Do Stuff*
    break;
case $fubar:
    *Do Other Stuff*
    break;
}
于 2010-03-04T21:35:27.377 回答