Совсем недавно моё невежество привело к тому, что система, к разработке которой я прикладываю свои руки и по возможности голову, на несколько часов оказалась частично непригодна для использования.
Несмотря на свой уже достаточно богатый опыт работы с PHP и давнюю сертификацию по этому языку (хотя многие к ней относятся с юморком, всё же это какая-никакая базовая проверка знаний), я понятия не имел, что isset для элемента массива со значением null вернёт false.
$arr = ['a' => null];
isset($arr['a']); // false
array_key_exists('a', $arr); // true
Казалось бы и в документации об этом написано, но я давно считал, что такие аксиомы наизусть знаю. Не знаю.
В процессе работы над своей задачей заметил в одном запутанном алгоритме использование array_key_exists и подумал, что заменить на isset будет безопасно. А isset, как известно, более быстрый способ проверки ключа: O(1) vs. O(n). Помимо скорости он еще и менее многословный, что обычно помогает при чтении и понимании кода.
Из-за своей самоуверенности, что такое мелкое и полезное изменение не может ничего сломать я не удосужился даже написать хоть какой-нибудь тест. Конечно, в этом случае я вряд ли написал бы правильный тест, всё же пренебрегать тестами не стоило.
Для меня это стало уроком:
- надо писать тесты, если их еще нет, даже при невинном на первый взгляд изменении;
- знания стоит периодически освежать: наша память — очень коварный механизм, с легкостью может подложить свинью.