Как бы я сделал оператор OR с делом Switch? (PHP) - PullRequest
5 голосов
/ 01 февраля 2010

Как бы я преобразовал это выражение if:

for($i = 1; $i < $argc; $i++)
{
    ...
    if(in_array($argv[$i], array('-V', '--version')))
    {
        $displayVersion = TRUE;
    }
    ...
}

В случай переключения без необходимости писать два оператора переключения?

Ответы [ 4 ]

13 голосов
/ 01 февраля 2010
switch($argv[$i])
{
    case '-V':
    case '--version':
        $displayVersion = true;
    break;
}
5 голосов
/ 01 февраля 2010

Прямой перевод будет выглядеть следующим образом:

switch(in_array($argv[$i], array('-V', '--version'))){
    case true:
        $displayVersion = TRUE; break;
}

Однако вы также можете сделать что-то подобное, что более понятно.

switch($argv[$i]){
    case '-V':
    case '--version':
        $displayVersion = TRUE; break;
}

В зависимости от того, что вы хотите сделать, одна строка может быть более понятной, хотя она отличается от приведенного выше кода тем, что переменная будет установлена ​​в false, если in_array($argv[$i], array('-V', '--version')) - false Учитывая ваше имя переменной, я сомневаюсь, что это плохо.

$displayVersion = in_array($argv[$i], array('-V', '--version'));
3 голосов
/ 01 февраля 2010
switch ($argv[$i])
{
    case '-V':
    case '--version':
        $displayVersion = true;
        break;
    case 'other':
        // do other stuff
        break;
    default:
        // your "else" case would go here
        break:
}
2 голосов
/ 01 февраля 2010

В дополнение к этому вы можете захотеть взглянуть на команду PHP getopt , которая является функцией для обработки аргументов командной строки в коротком и длинном форматах.

Редактировать: Собственно, вот кодовый блок

$options = getopt('V', array('version'));

if ($options['V'] || $options['version']) {
    $displayVersion = TRUE;
}

Обратите внимание, что для работы в Windows вам необходим PHP 5.3.

...