Chris@0: operators might accidentally let a float Chris@0: * through. Chris@17: * Chris@0: * @param int|float $number The number we want to convert to an int Chris@12: * @param bool $fail_open Set to true to not throw an exception Chris@17: * Chris@0: * @return float|int Chris@12: * @psalm-suppress InvalidReturnType Chris@0: * Chris@0: * @throws TypeError Chris@0: */ Chris@0: function RandomCompat_intval($number, $fail_open = false) Chris@0: { Chris@0: if (is_int($number) || is_float($number)) { Chris@0: $number += 0; Chris@0: } elseif (is_numeric($number)) { Chris@16: /** @psalm-suppress InvalidOperand */ Chris@0: $number += 0; Chris@0: } Chris@16: /** @var int|float $number */ Chris@0: Chris@0: if ( Chris@0: is_float($number) Chris@16: && Chris@0: $number > ~PHP_INT_MAX Chris@16: && Chris@0: $number < PHP_INT_MAX Chris@0: ) { Chris@0: $number = (int) $number; Chris@0: } Chris@0: Chris@0: if (is_int($number)) { Chris@0: return (int) $number; Chris@0: } elseif (!$fail_open) { Chris@0: throw new TypeError( Chris@0: 'Expected an integer.' Chris@0: ); Chris@0: } Chris@0: return $number; Chris@0: } Chris@0: }