wp/wp-includes/random_compat/cast_to_int.php
changeset 19 3d72ae0968f4
parent 9 177826044cd9
equal deleted inserted replaced
18:be944660c56a 19:3d72ae0968f4
     3  * Random_* Compatibility Library
     3  * Random_* Compatibility Library
     4  * for using the new PHP 7 random_* API in PHP 5 projects
     4  * for using the new PHP 7 random_* API in PHP 5 projects
     5  *
     5  *
     6  * The MIT License (MIT)
     6  * The MIT License (MIT)
     7  *
     7  *
     8  * Copyright (c) 2015 - 2017 Paragon Initiative Enterprises
     8  * Copyright (c) 2015 - 2018 Paragon Initiative Enterprises
     9  *
     9  *
    10  * Permission is hereby granted, free of charge, to any person obtaining a copy
    10  * Permission is hereby granted, free of charge, to any person obtaining a copy
    11  * of this software and associated documentation files (the "Software"), to deal
    11  * of this software and associated documentation files (the "Software"), to deal
    12  * in the Software without restriction, including without limitation the rights
    12  * in the Software without restriction, including without limitation the rights
    13  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    13  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    25  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
    25  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
    26  * SOFTWARE.
    26  * SOFTWARE.
    27  */
    27  */
    28 
    28 
    29 if (!is_callable('RandomCompat_intval')) {
    29 if (!is_callable('RandomCompat_intval')) {
    30     
    30 
    31     /**
    31     /**
    32      * Cast to an integer if we can, safely.
    32      * Cast to an integer if we can, safely.
    33      * 
    33      *
    34      * If you pass it a float in the range (~PHP_INT_MAX, PHP_INT_MAX)
    34      * If you pass it a float in the range (~PHP_INT_MAX, PHP_INT_MAX)
    35      * (non-inclusive), it will sanely cast it to an int. If you it's equal to
    35      * (non-inclusive), it will sanely cast it to an int. If you it's equal to
    36      * ~PHP_INT_MAX or PHP_INT_MAX, we let it fail as not an integer. Floats 
    36      * ~PHP_INT_MAX or PHP_INT_MAX, we let it fail as not an integer. Floats 
    37      * lose precision, so the <= and => operators might accidentally let a float
    37      * lose precision, so the <= and => operators might accidentally let a float
    38      * through.
    38      * through.
    39      * 
    39      *
    40      * @param int|float $number    The number we want to convert to an int
    40      * @param int|float $number    The number we want to convert to an int
    41      * @param bool      $fail_open Set to true to not throw an exception
    41      * @param bool      $fail_open Set to true to not throw an exception
    42      * 
    42      *
    43      * @return float|int
    43      * @return float|int
    44      * @psalm-suppress InvalidReturnType
    44      * @psalm-suppress InvalidReturnType
    45      *
    45      *
    46      * @throws TypeError
    46      * @throws TypeError
    47      */
    47      */
    48     function RandomCompat_intval($number, $fail_open = false)
    48     function RandomCompat_intval($number, $fail_open = false)
    49     {
    49     {
    50         if (is_int($number) || is_float($number)) {
    50         if (is_int($number) || is_float($number)) {
    51             $number += 0;
    51             $number += 0;
    52         } elseif (is_numeric($number)) {
    52         } elseif (is_numeric($number)) {
       
    53             /** @psalm-suppress InvalidOperand */
    53             $number += 0;
    54             $number += 0;
    54         }
    55         }
       
    56         /** @var int|float $number */
    55 
    57 
    56         if (
    58         if (
    57             is_float($number)
    59             is_float($number)
    58             &&
    60                 &&
    59             $number > ~PHP_INT_MAX
    61             $number > ~PHP_INT_MAX
    60             &&
    62                 &&
    61             $number < PHP_INT_MAX
    63             $number < PHP_INT_MAX
    62         ) {
    64         ) {
    63             $number = (int) $number;
    65             $number = (int) $number;
    64         }
    66         }
    65 
    67