php - 对案例使用变量,对开关使用函数?

标签 php case switch-statement

在 PHP 中我想这样做:

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

这是个糟糕的主意吗?会成功吗?

最佳答案

switch 中使用一个函数是可以的:该函数将被调用,并返回一个值——该值将用于这种情况。

这和写完全一样:

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

即使我更喜欢使用变量,这样代码也更易于阅读。


case 中使用变量是您不常看到的;但它也很好用 ;-)

引用 the manual page of switch :

The case expression may be any expression that evaluates to a simple type, that is, integer or floating-point numbers and strings.

因此,只要 $fu$fubar 包含简单类型值,您的代码就可以工作。


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

$a = 1;
$b = 2;
switch (1) {
    case $a: echo 'a'; break;
    case $b: echo 'b'; break;
}

将输出:

a

关于php - 对案例使用变量,对开关使用函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2382783/

相关文章:

sql - TSQL CASE LTRIM(RTRIM NULL

我们可以在 c 中对字符串使用 switch-case 语句吗?

javascript - 使 switch 语句的一部分失败但不是全部失败?

php - 对象返回三个值而不是一个。拉维

mysql - 在 case 循环 mysql 中创建多个数学语句

php - MYSQL 连接表行并用于 php 数组

sql - 将 SQL case 语句转换为存储过程?

java - Switch语句: Random generator

javascript - Php 和 Html 图表使用 Canvas.js 使用 mysql 数据库

php - 如何将 SOAP 响应转换为 PHP 数组?