2012-05-08 5 views
2

Я новичок в PHP, и я просто наткнулся на дневную пропажу, потому что я не понимал, что оператор PHP == делает тип принуждения, подобный Javascript.Можно ли всегда использовать === в PHP?

Я знаю, что Дуглас Крокфорд рекомендует никогда не использовать оператор == с Javascript и всегда использовать оператор ===.

Если я код, который никогда не предполагает принуждение типа, могу ли я использовать тот же совет в PHP и никогда не использовать оператор ==? безопасно ли всегда использовать оператор ===, или есть ли ошибки, о которых мне нужно знать?

+1

Я написал несколько фреймворков CMS и PHP, которые делают практически все операции и преобразование данных, которые может выполнять PHP. Я все еще использую '==' и '===', поскольку они решают разные проблемы. Однако в реальном мире '===' действительно нужно использовать больше, чем есть. – Xeoncross

+0

Я не могу вспомнить последний раз, когда я фактически использовал свободные версии сравнения. – goat

ответ

7

По умолчанию (во избежание проблем, с которыми вы столкнулись) вы должны использовать ===, а при необходимости - ==.

Например, вы можете принимать параметры из $_GET или аналогичный, и параметр может быть строкой true или false, против булевой true или false. Лично я проверяю все, но могут быть законные варианты использования для ==, если вы осознаете это и будьте осторожны при использовании.

4

== и ===, существуют по определенным причинам. Как вы уже упоминали в своем сообщении, == действительно вызывает принуждение.

Я исхожу из строго типизированного фона программирования и поэтому никогда не требую принуждения типа, как и вы. В этом случае безопасно всегда использовать ===.

Конечно, если вам требуется принуждение, используйте ==.

В случае ввода данных у вас нет контроля (параметры GET/POST, ответы API), вы можете либо использовать ==, либо использовать литье.

0

и var_dump('1' === 1);bool(false) потому что они имеют одинаковое значение, но разные типы. Один - это строка, а другая - int.

Используйте только ===, если вы знаете тип, который вы проверяете.

Смежные вопросы