Ответ
Это три фундаментально разных оператора в PHP:
-
=— оператор присваивания. Сохраняет значение в переменную.$count = 10; // Переменной $count присваивается значение 10. -
==— оператор равенства (нестрогое сравнение). Сравнивает значения после приведения типов (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.Это поведение часто является источником багов, поэтому я его избегаю.
-
===— оператор идентичности (строгое сравнение). Сравнивает и значения, и типы. Не выполняет приведение типов.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).