isset и array_key_exists — в чем различие?

Многие пхпшники недоумевают зачем сделана функция array_key_exists, когда есть обычный isset.
Проверочный код:
$testArray = array(1 =>; 'Первый', 'second' => 'Второй'); var_dump(isset($testArray[1])); // =>; bool(true) var_dump(array_key_exists(1, $testArray)); // => bool(true)
Если в массив попадает значение null, то тут сразу возникают отличия в их работе
$testArray = array(1 => 'Первый', 'second' => 'Второй', 3 => null); var_dump(isset($testArray[3])); // => bool(false) var_dump(array_key_exists(3, $testArray)); // => bool(true)
В проверках следует применять array_key_exists если в массивах возможно значение null. Поведение isset в данном случае вполне оправдано, исходя из документации: «Determine if a variable is set and is not NULL«.
При разработке приложений на связке PHP+MySql часто приходится использовать поля типа ENUM. Данный тип поля предназначен для создания списка из допустимых значений, которые перечислены спецификации столбца. Стоит отметить, что в базе поле с перечислением хранится как число, что обеспечивает высокую скорость работы.