← Назад к вопросам

В чем разница между =, == и ===?

1.2 Junior🔥 231 комментариев
#PHP Core

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Разница между =, ==, и ===

Это три разных оператора в PHP с разными назначениями и поведением.

= (Присваивание)

// = это оператор присваивания
$x = 5; // Присвоил переменной $x значение 5
$name = "John"; // Присвоил строку
$array = [1, 2, 3]; // Присвоил массив

// Может быть цепочка
$a = $b = $c = 10; // Все переменные = 10

Правило: присваивает значение переменной. После этого переменная содержит это значение.

== (Нестрогое сравнение)

// == проверяет ЗНАЧЕНИЯ, но не типы
// PHP пытается привести типы к одному

5 == "5" // true (число и строка, но значение одинаково)
5 == 5 // true
0 == false // true (0 это false в PHP)
"" == false // true (пустая строка это false)
"0" == false // true
"abc" == true // true (непустая строка это true)

// Опасные примеры
0 == "a" // true! (строка начинается не с цифры, преобразуется в 0)
false == "0" // true
null == 0 // true

Правило: сравнивает значения после автоматического преобразования типов. ОПАСНО!

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

// === проверяет ЧТО ЗНАЧЕНИЕ ЧТО И ТИП
// Без автоматического преобразования

5 === "5" // false (разные типы: int и string)
5 === 5 // true (одинаковое значение и тип)
0 === false // false (разные типы: int и bool)
"" === false // false (разные типы: string и bool)
"0" === false // false
"abc" === true // false

// Правильно
0 === 0 // true
"abc" === "abc" // true
true === true // true
null === null // true

Правило: сравнивает значение И тип. Это правильный способ!

Таблица сравнения

Выражение=====Результат
5 == "5"ДаНетtrue / false
0 == falseДаНетtrue / false
"" == falseДаНетtrue / false
null == 0ДаНетtrue / false

Практические примеры

Поиск в массиве (ОПАСНО с ==)

$array = [0, 1, 2, "a", "b"];

// С == (опасно!)
if (in_array("a", $array)) { // true (правильно)
    echo "Found";
}

if (in_array(0, $array)) { // true (но может быть ошибка!)
    echo "Found";
}

// С === (безопасно)
if (in_array("a", $array, true)) { // true
    echo "Found";
}

if (in_array(0, $array, true)) { // true только если действительно 0
    echo "Found";
}

Проверка результата функции

// Функция может вернуть false или 0
function findUser($id) {
    $user = DB::find($id);
    return $user ? $user : false;
}

// ОПАСНО
if (findUser(123) == false) { // true если вернулось false ИЛИ 0
    echo "Not found";
}

// Правильно
if (findUser(123) === false) { // true только если false
    echo "Not found";
}

// Или
if (!findUser(123)) { // Явная проверка на ложь
    echo "Not found";
}

Когда использовать каждый

// = для присваивания
$user = getUserFromDB();

// === для сравнения (99% случаев!)
if ($user === null) {
    echo "Not found";
}

if ($age === 18) {
    echo "Exactly 18";
}

// == редко, только если нужна гибкость типов
// Это обычно плохая идея

Таблица истины PHP

false: false, 0, 0.0, "", "0", null, [], undefined variables
true: всё остальное

Лучшие практики

✅ ИСПОЛЬЗУЙ ВСЕГДА ===

if ($status === "active") { }
if ($count === 0) { }
if ($user === null) { }
if ($result !== false) { }

❌ ИЗБЕГАЙ ==

if ($status == "active") { // Опасно!
if ($count == 0) { // Может быть false, null, "", "0"
if ($user == null) { // Опасно!

Вывод

  • = присвоение значения переменной
  • == нестрогое сравнение (с автопреобразованием типов) — ОПАСНО
  • === строгое сравнение (типы должны совпадать) — ИСПОЛЬЗУЙ ВСЕГДА

В современном PHP всегда используй === для сравнений!