3v4l.org

run code in 500+ PHP versions simultaneously
<?php function absint( $maybeint ) { return abs( (int) $maybeint ); } function new_absint( $maybeint ): int { if ( is_object( $maybeint ) ) { return 1; } if ( is_float( $maybeint ) ) { if ( ! is_finite( $maybeint ) ) { // Casting `NAN` or `INF` to int has produced `0` since PHP 7.0. return 0; } if ( $maybeint <= (float) PHP_INT_MIN || $maybeint >= (float) PHP_INT_MAX ) { // Casting a float beyond the integer range is unreliable and warns as of PHP 8.5. return PHP_INT_MAX; } } $maybeint = (int) $maybeint; if ( PHP_INT_MIN === $maybeint ) { // `abs( PHP_INT_MIN )` overflows to a float, as `PHP_INT_MAX` is one less than `-PHP_INT_MIN`. return PHP_INT_MAX; } return abs( $maybeint ); } #$data = '999 stuff'; // same #$data = '999999999999999999222222222288888888888888222222222227777777774444'; // same, warning is gone in newer version of PHP 8.5 ( 8.5.2+ ) #$data = -PHP_INT_MIN; // original: float, new: int -- and the numbers differ by 1 #$data = 'now is the time'; // same ( zero ) #$data = -PHP_INT_MAX; // same #$data = PHP_INT_MAX + 1; // original: float ( 9.223372036854776E+18 ), new: int ( 9223372036854775807 ) -- very different numbers #$data = PHP_INT_MIN - 1; // original: float( 9.223372036854776E+18 ), new: int( 9223372036854775807 ) -- very different numbers $data = new StdClass(); $data->name = 'data'; $data->place = 'where'; $data->stuff = [ 'green', 'blue', 'red' ]; var_dump( $data ); var_dump( absint( $data ) ); var_dump( new_absint( $data ) );
Output for 8.2.31 - 8.2.33, 8.3.0 - 8.3.33, 8.4.1 - 8.4.24, 8.5.0 - 8.5.9
object(stdClass)#1 (3) { ["name"]=> string(4) "data" ["place"]=> string(5) "where" ["stuff"]=> array(3) { [0]=> string(5) "green" [1]=> string(4) "blue" [2]=> string(3) "red" } } Warning: Object of class stdClass could not be converted to int in /in/EMGrO on line 4 int(1) int(1)

preferences:
45.7 ms | 803 KiB | 4 Q