[wp-trac] [WordPress Trac] #65143: Add polyfill for PHP 8.6's clamp() function
WordPress Trac
noreply at wordpress.org
Tue Apr 28 15:27:06 UTC 2026
#65143: Add polyfill for PHP 8.6's clamp() function
-------------------------------+-----------------------------
Reporter: Soean | Owner: (none)
Type: enhancement | Status: new
Priority: normal | Milestone: Awaiting Review
Component: General | Version:
Severity: normal | Keywords:
Focuses: php-compatibility |
-------------------------------+-----------------------------
PHP 8.6 introduces a new built-in `clamp()` function
([https://wiki.php.net/rfc/clamp RFC]) that clamps a value within a given
range. If the value is within bounds, it is returned as-is; otherwise, the
nearest bound is returned.
Since WordPress supports PHP 7.4 and above a polyfill is needed so
WordPress and plugins can safely use `clamp()` without checking the PHP
version.
=== Proposed Behavior ===
* If `$value` is within `[$min, $max]`, returns `$value`.
* If `$value > $max`, returns `$max`.
* If `$value < $min`, returns `$min`.
* Throws `ValueError` (PHP >= 8.0) or `InvalidArgumentException` (PHP
7.x) if `$min > $max` or if `$min`/`$max` is `NAN`.
The polyfill relies on a new private helper `_wp_throw_value_error()`,
which conditionally throws `ValueError` on PHP >= 8.0 and falls back to
`InvalidArgumentException` on PHP 7.x — consistent with how
[https://github.com/symfony/polyfill-php86 Symfony] handles the same
compatibility problem.
=== Usage Examples ===
{{{
clamp( 5, 0, 100 ); // 5
clamp( -5, 0, 100 ); // 0
clamp( 105, 0, 100 ); // 100
clamp( 3.14, 0, 20 ); // 3.14
clamp( 3.14, 10, 20 ); // 10
clamp( 'P', 'A', 'Z' ); // "P"
clamp( 'P', 'X', 'Z' ); // "X"
clamp( new DateTimeImmutable('2026-01-08'), new
DateTimeImmutable('2026-01-01'), new DateTimeImmutable('2026-12-31') );
// DateTimeImmutable('2026-01-08')
clamp( 4, NAN, 6 ); // ValueError: clamp(): Argument #2 ($min) cannot be
NAN
clamp( 4, 8, 6 ); // ValueError: clamp(): Argument #2 ($min) must be
smaller than or equal to argument #3 ($max)
}}}
=== Changes ===
* `src/wp-includes/compat.php`: Add `_wp_throw_value_error()` helper and
`clamp()` polyfill.
=== References ===
* PHP RFC: https://wiki.php.net/rfc/clamp
* PHP implementation PR: https://github.com/php/php-src/pull/19434
* Symfony polyfill reference: https://github.com/symfony/polyfill-php86
--
Ticket URL: <https://core.trac.wordpress.org/ticket/65143>
WordPress Trac <https://core.trac.wordpress.org/>
WordPress publishing platform
More information about the wp-trac
mailing list