понедельник, 1 августа 2011 г.

PHP - необычное поведение функции in_array


Результатом выполнения следующего php кода будет TRUE:
  1. $result = in_array("test", array(0));
  2. var_dump( $result );

На первый взгляд это приводит в недоумение, и можно подумать, что это какой-то баг или тонкость языка. Как в массиве с единственным элементом функция нашла совпадение, ведь "test" не равно 0 !

Так и есть - не равно, но т.к. 0 - это integer, то php приводит "test" к integer получая 0.
(int) "test" == 0 ,а это уже TRUE.

На самом деле, если внимательно почитать документацию функции in_array, то можно обратить внимание, что она не учитывает тип переменных, если не передан третий параметр, который заставляет учитывать тип переменных.
Следующая конструкция вернет уже FALSE:
  1. $result = in_array("test", array(0), TRUE);
  2. var_dump( $result );

Слабая типизация порой очень коварна)