Выбор ответа Junior Строки спрашивают часто обновлено

Классическая ловушка strpos

Вопрос

Почему этот код считает, что в строке "admin" нет подстроки "a"?

if (!strpos("admin", "a")) {
    echo "нет буквы a";
}

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: strpos вернула 0, а !0 это true. Найденная в начале строки подстрока имеет позицию 0, а 0 ложное значение.

Варианты ответа

  1. strpos чувствительна к регистру букв
  2. strpos ищет только с конца строки
  3. Нужно передавать аргументы в обратном порядке
  4. strpos вернула 0, а !0 это trueправильный ответ

Разбор

Найденная в начале строки подстрока имеет позицию 0, а 0 ложное значение. Правильная проверка: strpos($s, "a") === false. С PHP 8 есть str_contains, str_starts_with и str_ends_with, которые возвращают bool. Регистр здесь совпадает, а порядок аргументов верный: сначала строка, потом подстрока.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.