switch中的引用表达式

时间:2014-11-08 14:36:17

标签: php switch-statement

在PHP中,是否可以获得对switch语句中使用的表达式的引用?

例如:

switch ($_POST['id']) {
    case 0:
        $id = <switch expression>
        break;
    case 1:
        $id = <switch expression>
        break;
    default
        $id = null;
}

所以如果$_POST['id'] = 1,那么$id = 1

然后我可以测试if (! $id) {}

显然你可能在想为什么不只是使用$id = $_POST['id'],但在实例中它看起来像这样

switch (strtolower($load->post('payment_method')))
{
    case 'paypal':
        $payment_method = <switch/case expression>;
        $payment_type = 'ewallet';
        break;
    case 'bitcoin':
        $payment_method = <switch/case expression>;
        $payment_type = 'ecurrency';
        break;
    default:
        //$payment_method = null; // taken from card number
        $payment_type = 'card';
}

我不想要$payment_method分配。

有一个EUREKA时刻写下这个
嗯,这适用于我试图实现的目标。

switch (($payment_method = strtolower($load->post('payment_method'))))
{
    case 'paypal':
        $payment_type = 'ewallet';
        break;
    case 'bitcoin':
        $payment_type = 'ecurrency';
        break;
    default:
        unset($payment_method); // taken from card number
        $payment_type = 'card';
}

3 个答案:

答案 0 :(得分:1)

没有办法

使用例如这样的方式

$cases = array(0, 1, 3 ,5);
$defaultVal = 1;
$id = in_array($_POST['id'], $cases) ? $_POST['id']: $defaultVal;

答案 1 :(得分:0)

AFAIK PHP中没有这样的功能。

但你可以像这样轻松地做你想要的事情:

switch (strtolower($load->post('payment_method')))
{
    case 'paypal':
        $payment_method = 'paypal';
        $payment_type = 'ewallet';
        break;
    case 'bitcoin':
        $payment_method = 'bitcoin';
        $payment_type = 'ecurrency';
        break;
    default:
        $payment_method = null; // taken from card type
        $payment_type = 'card';
}

答案 2 :(得分:0)

实际上我只是意识到使用一个简单的解决方法可能

switch ($switch_value = strtolower($load->post('payment_method')))
{
    case 'paypal':
        $payment_method = $switch_value;
        $payment_type = 'ewallet';
        break;
    case 'bitcoin':
        $payment_method = $switch_value;
        $payment_type = 'ecurrency';
        break;
    default:
        $payment_method = null; // taken from card type
        $payment_type = 'card';
}

- )