preg_match соответствует пустому предмету - PullRequest
0 голосов
/ 01 марта 2019

У меня есть preg_match в коммутаторе / корпусе, который соответствует пустому объекту, и я не понимаю, почему.

Вот мой код:

switch ( $page_type ) {
    case ( preg_match('/^assets_?.*/', $page_type ) ? true : false ):
        // code
        break;
}

$page_type обычно является строкой, но я нашел несколько случаев, когда она может быть NULL.По какой-то причине троичный здесь возвращает true в одном из этих случаев, поэтому код внутри случая запускается.

Я понимаю, что мог бы это исправить, проверив значение NULL перед переключателем, но может кто-тообъясните, почему это происходит?

1 Ответ

0 голосов
/ 01 марта 2019

Когда $page_type равно NULL, preg_match() вернет 0, а троичное вернет false.В данном случае это эквивалентно:

switch (null) {
    case false:
        //code
        break;
    }
}

Поскольку null == false, этот случай выполняется.

Не используйте switch, если вам нужно проверить сложное условие вместо точногосопоставьте, напишите обычное if утверждение:

if (preg_match('/^assets_?.*/', $page_type )) {
    // code
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...