Подтвердить что ты не робот

Regexp в инструкции switch

Разрешено ли регулярное выражение в операторах switch/case PHP и как их использовать?

4b9b3361

Ответ 1

Оператор switch-case работает как if-elseif.
Кроме того, вы можете использовать регулярное выражение для if-elseif, вы также можете использовать его в коммутационном футляре.

if (preg_match('/John.*/', $name)) {
    // do stuff for people whose name is John, Johnny, ...
}

может быть закодирован как

switch $name {
    case (preg_match('/John.*/', $name) ? true : false) :
        // do stuff for people whose name is John, Johnny, ...
        break;
}

Надеюсь, что это поможет.

Ответ 2

Нет или ограничено. Вы можете, например, переключиться на true:

switch (true) {
    case $a == 'A':
        break;
    case preg_match('~~', $a);
        break;
}

В основном это дает оператор if-elseif-else, но с синтаксисом и способностью switch (например, проваливаться.)

Ответ 3

Да, но вы должны использовать эту технику, чтобы избежать проблем, когда аргумент switch evals равен false:

switch ($name) {
  case preg_match('/John.*/', $name) ? $name : !$name:
    // do stuff
}