wp/wp-includes/random_compat/cast_to_int.php
changeset 9 177826044cd9
parent 7 cf61fcea0001
child 19 3d72ae0968f4
equal deleted inserted replaced
8:c7c34916027a 9:177826044cd9
     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 Paragon Initiative Enterprises
     8  * Copyright (c) 2015 - 2017 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
    24  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    24  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    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 (!function_exists('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)
    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 boolean   $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 int (or float if $fail_open)
    43      * @return float|int
       
    44      * @psalm-suppress InvalidReturnType
    44      *
    45      *
    45      * @throws TypeError
    46      * @throws TypeError
    46      */
    47      */
    47     function RandomCompat_intval($number, $fail_open = false)
    48     function RandomCompat_intval($number, $fail_open = false)
    48     {
    49     {
    49         if (is_numeric($number)) {
    50         if (is_int($number) || is_float($number)) {
       
    51             $number += 0;
       
    52         } elseif (is_numeric($number)) {
    50             $number += 0;
    53             $number += 0;
    51         }
    54         }
    52 
    55 
    53         if (
    56         if (
    54             is_float($number)
    57             is_float($number)
    58             $number < PHP_INT_MAX
    61             $number < PHP_INT_MAX
    59         ) {
    62         ) {
    60             $number = (int) $number;
    63             $number = (int) $number;
    61         }
    64         }
    62 
    65 
    63         if (is_int($number) || $fail_open) {
    66         if (is_int($number)) {
    64             return $number;
    67             return (int) $number;
       
    68         } elseif (!$fail_open) {
       
    69             throw new TypeError(
       
    70                 'Expected an integer.'
       
    71             );
    65         }
    72         }
    66 
    73         return $number;
    67         throw new TypeError(
       
    68             'Expected an integer.'
       
    69         );
       
    70     }
    74     }
    71 }
    75 }