Menu
Coddy logo textTech

Equality & Identity

Часть раздела Основы путешествия по PHP на Coddy — урок 24 из 71.

PHP предоставляет два способа проверить, равны ли значения: оператор равенства (==) и оператор идентичности (===). Понимание разницы крайне важно для написания надежного кода.

Оператор равенства (==) сравнивает значения после их преобразования к одному типу. Это называется «нестрогим сравнением»:

<?php
var_dump(5 == "5");    // bool(true) - строка преобразована в число
var_dump(0 == false);  // bool(true) - оба становятся 0
var_dump(1 == true);   // bool(true) - оба становятся 1
?>

Оператор идентичности (===) сравнивает и значение и тип. Никакое преобразование не происходит, поэтому оба должны совпадать точно:

<?php
var_dump(5 === "5");   // bool(false) - int против string
var_dump(5 === 5);     // bool(true) - одинаковый тип и значение
var_dump(0 === false); // bool(false) - int против bool
?>

Для сравнений «не равно» используйте != (нестрогое) или !== (строгое):

<?php
var_dump(5 != "5");    // bool(false) - значения равны
var_dump(5 !== "5");   // bool(true) - типы различаются
?>

В качестве лучшей практики отдавайте предпочтение === и !==, чтобы избежать неожиданных сюрпризов при приведении типов.

challenge icon

Задание

Легко

Прочитайте два значения из ввода: число (как строку) и целое число.

Используйте операторы равенства и идентичности для оценки следующих сравнений и выведите результат каждого с помощью var_dump(), каждый на новой строке:

  1. Проверьте, равно ли строковое значение целому числу с помощью нестрогого сравнения (==)
  2. Проверьте, равно ли строковое значение целому числу с помощью строгого сравнения (===)
  3. Проверьте, не равно ли строковое значение целому числу с помощью нестрогого сравнения (!=)
  4. Проверьте, не равно ли строковое значение целому числу с помощью строгого сравнения (!==)

Примечание: Оставьте первое значение строкой (не приводите его тип). Приведите второе значение к целому числу.

Пример:

Если входные данные 42 и 42, вывод должен быть:

bool(true)
bool(false)
bool(false)
bool(true)

Объяснение:

  • "42" == 42 истинно (значения равны после приведения типов)
  • "42" === 42 ложно (строка против int — разные типы)
  • "42" != 42 ложно (значения равны)
  • "42" !== 42 истинно (типы разные)

Шпаргалка

PHP имеет два способа сравнения значений:

Оператор равенства (==) — нестрогое сравнение, которое преобразует значения к одному типу перед сравнением:

<?php
var_dump(5 == "5");    // bool(true) - string converted to number
var_dump(0 == false);  // bool(true) - both become 0
var_dump(1 == true);   // bool(true) - both become 1
?>

Оператор идентичности (===) — строгое сравнение, которое проверяет и значение, и тип:

<?php
var_dump(5 === "5");   // bool(false) - int vs string
var_dump(5 === 5);     // bool(true) - same type and value
var_dump(0 === false); // bool(false) - int vs bool
?>

Операторы неравенства:

<?php
var_dump(5 != "5");    // bool(false) - values are equal (loose)
var_dump(5 !== "5");   // bool(true) - types differ (strict)
?>

Лучшая практика: используйте === и !==, чтобы избежать неожиданного преобразования типов.

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

<?php
// Чтение ввода
$stringValue = trim(fgets(STDIN));
$intValue = intval(trim(fgets(STDIN)));

// TODO: Напишите свой код ниже
// Используйте var_dump() для печати результата каждого сравнения на новой строке:
// 1. Не строгое равенство (==)
// 2. Строгое равенство (===)
// 3. Не строгое неравенство (!=)
// 4. Строгое неравенство (!==)

?>
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Основы