В чем разница между операторами =, == и === в PHP?

«В чем разница между операторами =, == и === в PHP?» — вопрос из категории PHP Core, который задают на 28% собеседований PHP Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Это три фундаментально разных оператора в PHP:

  1. = — оператор присваивания. Сохраняет значение в переменную.

    $count = 10; // Переменной $count присваивается значение 10.
  2. == — оператор равенства (нестрогое сравнение). Сравнивает значения после приведения типов (type juggling).

    var_dump(10 == '10');    // bool(true) - строка '10' приводится к integer 10.
    var_dump(0 == 'abc');    // bool(true) - строка 'abc' приводится к integer 0.
    var_dump(false == '');   // bool(true) - пустая строка приводится к boolean false.

    Это поведение часто является источником багов, поэтому я его избегаю.

  3. === — оператор идентичности (строгое сравнение). Сравнивает и значения, и типы. Не выполняет приведение типов.

    var_dump(10 === '10');   // bool(false) - разные типы (int vs string).
    var_dump(0 === '0');     // bool(false)
    var_dump(false === '');  // bool(false)
    var_dump(10 === 10);     // bool(true) - одинаковые тип и значение.

Моё правило: В 99% случаев для сравнения я использую строгий оператор === (и его аналог для неравенства !==). Это делает код предсказуемым и защищает от неявных ошибок, связанных с приведением типов. Оператор == уместен только в очень специфических случаях, например, при сравнении с null, где == и === ведут себя одинаково (null == false и null === null).