PHP и великолепный оператор «===»

В этой статье описывается как правильно работать с операторами сравнения и рассказывается, чем отличается оператор «===» от «==» и в каких случаях ему нет замены в 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) {

Неправда ли великолепно? :)

Оцените статью
( Пока оценок нет )
Блог админа