В этой статье описывается как правильно работать с операторами сравнения и рассказывается, чем отличается оператор «===» от «==» и в каких случаях ему нет замены в PHP.
Предположим, что у нас уже есть массив с числовыми индексами:
[0] => ‘bla’
[1] => ‘blub’
Теперь, вы хотите что-то делать если элемент ‘bla’ найден в массиве.
Замечательно, мы знаем функцию в PHP — array_search, которая возвращает ключ или ключи найденного значения. Делаем что-то вроде этого:
if(array_search($array, ‘bla’)) { do_something }
Можно ли ожидать что do_something будет выполнено?
Если да: вы не правы.
Если нет: великолепно, вы что-то смыслите в PHP.
На самом деле, если для ‘bla’ нет индекса 0 — то все будет работать, потому что 1, 2, 3, 4, и т.д. это TRUE. Но по непонятной причине в PHP 0 почему то предстает как FALSE, в зависимости от контекста. Следовательно этот if() работает для всех элементов кроме 0.
Можно было бы попытаться написать:
if(array_search… != FALSE)
Но это не сработает, потому что 0 это и есть FALSE, следовательно вы получите if(FALSE != FALSE) который никогда не будет TRUE.
Новичок в PHP (или даже продвинутый программист — который не сталкивался с такими случаями) может спросить:
Каково же решение данной проблемы?
К счастью документация у PHP огромная. Она нам рассказывает о функции array_search. К тому же у PHP есть замечательный оператор (===), который зачастую вызывает у неосведомленных людей вопрос «WTF?» когда они слышат о нем в первый раз. В дополнении к проверке значений переменных этот оператор так же сравнивает и их тип. Это приводит нас к нужному результату, поскольку 0 это целое число, тогда как FALSE это логическое значение. Так что решение нашей проблемы будет выглядеть так:
if (array_search($array, ‘bar’) !== FALSE) {
Неправда ли великолепно? :)