Операторы сравнения «===» и «! ==» подтверждают две вещи:
- Значения равны, и
- Значения одного типа
Краткий ответ на ваш вопрос «в чем смысл использования! == с функцией strcmp» - это просто «это хорошая практика». Это единственная причина, по которой конкретно strcmp, и! = Даст вам точно такой же результат, когда дело доходит до этой функции.
Длинный ответ выглядит следующим образом:
PHP традиционно слабо типизированный язык. То есть типы данных не так уж и важны, и PHP автоматически приводит типы к типам. Он по-прежнему делает это по умолчанию (хотя за последние годы было добавлено много вещей для улучшения ситуации). Например, если вы добавите строку «1» к целому числу 1, PHP автоматически преобразует строку в целое число и вернет целочисленное значение 2. Строго типизированные языки вернут ошибку, если вы попытаетесь это сделать. Другой пример: PHP приведет к преобразованию 0 в логическое значение false и любое другое ненулевое значение в логическое значение true.
Это второй пример, который вызывает проблемы с некоторыми встроенными функциями PHP. Например, функция strpos (). Если вы проверите страницу документации для strpos , вы увидите большое «Предупреждение» в разделе «Возвращаемые значения», в котором говорится: «Эта функция может возвращать логическое значение FALSE, но также может возвращать не-логическое значение, которое оценивает в ЛОЖЬ ". По этой причине рекомендуется использовать оператор «===», чтобы убедиться, что вы получаете точное значение и тип, которые ожидаете. Таким образом, «=== 0» означает, что строка была найдена в начале ввода, а «=== false» означает, что строка не найдена. Если вы просто использовали «== false», вы не будете различать строку, найденную в начале ввода, и строку, которая не будет найдена вообще (потому что 0 будет неявно приведено к логическому false для оператора «if» ).
Итак, разработчики привыкли проверять равенство и тип, используя «===» и «! ==». Это хорошая привычка.
Поскольку strcmp всегда возвращает целое число, а вы всегда сравниваете его с целым числом, неявного преобразования типов не существует, поэтому сравнение типов и равенство не обязательно.