0

たとえば、私はこれを持っています:

switch ($action)
{
    case 'my_action':
        doSomething();
    break;

    case 'second_action':
        if ($this_is_true)
        {
            $action = 'my_action';
        }
        else
        {
            doSomethingElse();
        }
    break;
}

my_action上記の例では、2 番目のケースのsecond_action変数$this_is_trueが true に設定されている場合、もう一度スイッチを通過してから最初のケースを呼び出しますか?

これがうまくいかない場合、代替手段は何ですか?

4

3 に答える 3

2

次のようなことを試すことができます:

switch ($action)
{
case 'my_action':
case 'second_action':
    if ($this_is_true || $action=='my_action')
    {
       doSomething();
    }
    else
    {
        doSomethingElse();
    }
break;
}

$action が等しい場合'my_action'、文caseが見つからないためbreak、文が見つかるまで 2 番目のケースを実行しbreakます。

http://php.net/manual/en/control-structures.switch.phpの例 #3 を参照して、壊れないスイッチ ケースの詳細を確認してください。

于 2013-11-11T21:16:10.417 に答える
1

いいえ、そうではありません。doSomething();「second_action」ケースで呼び出すだけです。

この単純なケースではスイッチを使用しませんが、非常に長い場合は次のようになります。

$do = false;

switch ($action)
{
    case 'my_action':
        $do = true;
    break;

    case 'second_action':
        if ($this_is_true)
        {
            $action = 'my_action';
            $do = true;
        }
        else
        {
            doSomethingElse();
        }
    break;
}

if($do) { doSomething(); }
于 2013-11-11T21:15:10.933 に答える
-1

このようにしてみてください:

do {
    switch ($action)
    {
        case 'my_action':
            $this_is_true = false;
            doSomething();
        break;

        case 'second_action':
            if ($this_is_true)
            {
                $action = 'my_action';
            }
            else
            {
                doSomethingElse();
            }
        break;
    }
} while($this_is_true);

必要な場所に切り替える$this_is_trueことを忘れないでください。falseしかし、このコードは美しくありません...コードをリファクタリングしたほうがよいかもしれません。

于 2013-11-11T21:43:30.000 に答える