Calling a userland function with too few arguments used to be a warning that let execution continue with the parameter unset, which turned a call-site mistake into a null somewhere further down.
function ship(Order $order, Address $to) { /* ... */ }
try {
ship($order);
} catch (ArgumentCountError $e) {
// 7.1: a real error, thrown at the call
}
It extends TypeError, so an existing catch (TypeError) already covers it and the new class only matters when the two need distinguishing. The practical effect is in tests: a refactor that adds a required parameter and misses a call site now fails at that line rather than producing a confusing null further along.