📚
#48 05.10.2025 PHP Basics

Расскажите об использовании оператора !==.

!== — оператор строгого неравенства. Проверяет, что значения ИЛИ типы операндов различны. Критически важен для сравнения с false (strpos() возвращает 0 или false). Всегда предпочтительнее !=, так как исключает неявное приведение типов.

Подробнее
⚠️
Внимание! Этот текст был сгенерирован AI-ассистентом. Информация может содержать неточности и требует проверки.

Полный ответ:

1. Основное назначение: Оператор строгого неравенства

!== — это оператор строгого неравенства. Он возвращает true, если операнды не равны ИЛИ их типы не совпадают.

$a !== $b  // TRUE если $a не равно $b ИЛИ типы $a и $b разные

2. Ключевое отличие от != (нестрогое неравенство)

Это самое важное различие, которое является частым источником ошибок:

Оператор Проверяет Пример Результат
!= Только значения (с приведением типов) 0 != "0" false (равны после приведения)
!== И значения, И типы 0 !== "0" true (типы разные)

3. Почему строгое сравнение критически важно

Классическая ошибка с функциями, возвращающими false:

// Функция strpos() возвращает позицию (0, 1, 2...) или false
$position = strpos('Hello', 'H');

// ОПАСНО с != (нестрогое сравнение):
if ($position != false) {
    echo "Найдено в позиции: $position";
} else {
    echo "Не найдено"; // Выполнится ОШИБОЧНО! (0 == false)
}

// ПРАВИЛЬНО с !== (строгое сравнение):
if ($position !== false) {
    echo "Найдено в позиции: $position"; // 0 !== false -> true
} else {
    echo "Не найдено";
}

Сравнение с разными типами:

var_dump(0 !== "0");     // true (int vs string)
var_dump(false !== "");   // true (bool vs string)  
var_dump(null !== 0);    // true (null vs int)
var_dump(1 !== true);    // true (int vs bool)

4. Таблица сравнения для разных типов

// Все эти сравнения вернут TRUE
var_dump(0 !== "0");        // разные типы
var_dump(0 !== false);      // разные типы
var_dump("" !== false);     // разные типы
var_dump(null !== false);   // разные типы
var_dump([] !== false);     // разные типы

// А эти вернут FALSE (одинаковые значения и типы)
var_dump(5 !== 5);         // false
var_dump("text" !== "text"); // false

5. Практическое применение

Проверка возвращаемых значений функций:

// Для функций, которые могут вернуть 0 или false
$result = strpos($haystack, $needle);
if ($result !== false) {
    // Действительно найдено (0, 1, 2...)
}

// Для функций, которые могут вернуть null или пустую строку
$data = getData();
if ($data !== null) {
    // Данные есть (даже пустая строка или 0)
}

Строгая валидация типов:

function processValue($value) {
    if ($value !== null && $value !== '') {
        // Значение не null и не пустая строка
        // Но может быть 0, false, '0' и т.д.
    }
}

6. Best Practices

  1. Всегда используйте !== по умолчанию вместо !=
  2. Особенно критично для проверки возвращаемых значений функций
  3. Явно проверяйте типы, когда это важно для логики:
// Вместо этого:
if ($value != '') { ... }

// Лучше так (если важно различать типы):
if ($value !== null && $value !== '') { ... }

// Или так (если нужно любое truthy значение):
if (!empty($value)) { ... }

7. Сравнение с === (строгое равенство)

!== является логическим отрицанием ===:

var_dump($a === $b);  // Строгое равенство
var_dump($a !== $b);  // Строгое неравенство (обратное)

8. Особенности с объектами

Для объектов !== проверяет, что это не один и тот же экземпляр:

class Test {}
$obj1 = new Test();
$obj2 = new Test();
$obj3 = $obj1;

var_dump($obj1 !== $obj2); // true (разные объекты)
var_dump($obj1 !== $obj3); // false (один и тот же объект)

Итог:

!== — оператор строгого неравенства, который проверяет и значения, и типы операндов. Его ключевые преимущества:

  1. Предсказуемость — нет неявного приведения типов
  2. Безопасность — исключает скрытые ошибки (особенно с 0 и false)
  3. Надежность — обязателен для проверки возвращаемых значений функций

Рекомендация: В 99% случаев используйте !== вместо !=. Это одна из самых важных практик для написания надежного PHP-кода.