Integer division in PHP has always been (int) ($a / $b) or floor($a / $b), both of which route through a float — so past 253 the answer quietly stops being exact, and the two disagree for negative numbers.
intdiv(10, 3); // 3
intdiv(-10, 3); // -3
floor(-10 / 3); // -4.0 — different answer
intdiv(PHP_INT_MAX, 1); // exact
(int) (PHP_INT_MAX / 1); // not
intdiv() truncates toward zero, which matches what % does, so the pair are consistent where floor() and % are not. It throws DivisionByZeroError rather than emitting a warning and returning false, which is one more fatal turned into something catchable.