rest_is_integer()WP 5.5.0

Determines if a given value is integer-like.

This reports whether the value represents an integer; it does not guarantee that the value can be represented as a native PHP integer. Values whose magnitude exceeds PHP_INT_MAX are still reported as integer-like, even though the (int) cast that rest_sanitize_value_from_schema() applies for the 'integer' type cannot round-trip them: an out-of-range numeric string saturates to PHP_INT_MAX or PHP_INT_MIN, while an out-of-range float is an undefined conversion in PHP that yields an arbitrary wrapped value. Likewise, a numeric value with a fractional part that is too large for the fraction to be represented as a float (greater than 2 ** 53) is reported as integer-like.

No Hooks.

Returns

bool. True if an integer, otherwise false.

Usage

rest_is_integer( $maybe_integer ): bool;
$maybe_integer(mixed) (required)
The value being evaluated.

Changelog

Since 5.5.0 Introduced.

rest_is_integer() code WP 7.1

function rest_is_integer( $maybe_integer ): bool {
	if ( is_int( $maybe_integer ) ) {
		return true;
	}

	// A canonical integer string of any magnitude — verified without float conversion.
	if ( is_string( $maybe_integer ) && preg_match( '/^\s*[+-]?[0-9]+\s*$/', $maybe_integer ) ) {
		return true;
	}

	// Decimal and scientific-notation strings (and floats) keep their historical behavior.
	if ( ! is_numeric( $maybe_integer ) ) {
		return false;
	}
	$float_value = (float) $maybe_integer;

	/*
	 * The strict equality here is not the unreliable "are two computed floats equal" comparison
	 * (e.g. 0.1 + 0.2 === 0.3, which is false). It compares a float to its own floor() to ask
	 * "does this float have a fractional part?". A float is whole exactly when it equals its floor,
	 * so the comparison is exact and safe regardless of floating-point representation error.
	 */
	return floor( $float_value ) === $float_value;
}