3v4l.org

run code in 500+ PHP versions simultaneously
<?php $test = static function (string $expected, int $precision): void { $date = DateTimeImmutable::createFromFormat('U.u', $expected); echo 'Testing "', $date->format('Y-m-d H:i:s.u'), '" with given precision (', $precision, ')', PHP_EOL; ini_set('serialize_precision', $precision); $encoded = json_encode((float) $date->format('U.u')); var_dump($expected, $encoded, $expected === $encoded); if ($expected === $encoded) { echo PHP_EOL; return; } $adjustedPrecision = strlen($date->format('Uu')); echo 'Testing with adjusted precision (', $adjustedPrecision, ')', PHP_EOL; ini_set('serialize_precision', $adjustedPrecision); $encoded = json_encode((float) $date->format('U.u')); var_dump($expected, $encoded, $expected === $encoded); echo PHP_EOL; }; // $test('1487285080.123456', 8); // $test('1487285080.123456', 16); // $test('11487285080.123456', 16); // $test('112487285080.123456', -1); // $test('9999999999.999999', -1); $test('9999999999.999994', -1); $test('9999999999.999995', -1);
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/0jE0W
function name:  (null)
number of ops:  11
compiled vars:  !0 = $test
line      #* E I O op                               fetch          ext  return  operands
-----------------------------------------------------------------------------------------
    3     0  E >   DECLARE_LAMBDA_FUNCTION                              ~1      [0]
          1        ASSIGN                                                       !0, ~1
   38     2        INIT_DYNAMIC_CALL                                            !0
          3        SEND_VAL_EX                                                  '9999999999.999994'
          4        SEND_VAL_EX                                                  -1
          5        DO_FCALL                                          0          
   39     6        INIT_DYNAMIC_CALL                                            !0
          7        SEND_VAL_EX                                                  '9999999999.999995'
          8        SEND_VAL_EX                                                  -1
          9        DO_FCALL                                          0          
         10      > RETURN                                                       1


Dynamic Functions:
Dynamic Function 0
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 43) Position 1 = 36, Position 2 = 38
Branch analysis from position: 36
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 38
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/0jE0W
function name:  {closure:/in/0jE0W:3}
number of ops:  67
compiled vars:  !0 = $expected, !1 = $precision, !2 = $date, !3 = $encoded, !4 = $adjustedPrecision
line      #* E I O op                               fetch          ext  return  operands
-----------------------------------------------------------------------------------------
    3     0  E >   RECV                                                 !0      
          1        RECV                                                 !1      
    5     2        INIT_STATIC_METHOD_CALL                                      'DateTimeImmutable', 'createFromFormat'
          3        SEND_VAL                                                     'U.u'
          4        SEND_VAR                                                     !0
          5        DO_FCALL                                          0  $5      
          6        ASSIGN                                                       !2, $5
    6     7        ECHO                                                         'Testing+%22'
          8        INIT_METHOD_CALL                                             !2, 'format'
          9        SEND_VAL_EX                                                  'Y-m-d+H%3Ai%3As.u'
         10        DO_FCALL                                          0  $7      
         11        ECHO                                                         $7
         12        ECHO                                                         '%22+with+given+precision+%28'
         13        ECHO                                                         !1
         14        ECHO                                                         '%29'
         15        ECHO                                                         '%0A'
    8    16        INIT_FCALL                                                   'ini_set'
         17        SEND_VAL                                                     'serialize_precision'
         18        SEND_VAR                                                     !1
         19        DO_ICALL                                                     
   11    20        INIT_FCALL                                                   'json_encode'
         21        INIT_METHOD_CALL                                             !2, 'format'
         22        SEND_VAL_EX                                                  'U.u'
         23        DO_FCALL                                          0  $9      
         24        CAST                                              5  ~10     $9
         25        SEND_VAL                                                     ~10
         26        DO_ICALL                                             $11     
         27        ASSIGN                                                       !3, $11
   13    28        INIT_FCALL                                                   'var_dump'
         29        SEND_VAR                                                     !0
         30        SEND_VAR                                                     !3
         31        IS_IDENTICAL                                         ~13     !0, !3
         32        SEND_VAL                                                     ~13
         33        DO_ICALL                                                     
   15    34        IS_IDENTICAL                                                 !0, !3
         35      > JMPZ                                                         ~15, ->38
   16    36    >   ECHO                                                         '%0A'
   17    37      > RETURN                                                       null
   20    38    >   INIT_METHOD_CALL                                             !2, 'format'
         39        SEND_VAL_EX                                                  'Uu'
         40        DO_FCALL                                          0  $16     
         41        STRLEN                                               ~17     $16
         42        ASSIGN                                                       !4, ~17
   22    43        ECHO                                                         'Testing+with+adjusted+precision+%28'
         44        ECHO                                                         !4
         45        ECHO                                                         '%29'
         46        ECHO                                                         '%0A'
   24    47        INIT_FCALL                                                   'ini_set'
         48        SEND_VAL                                                     'serialize_precision'
         49        SEND_VAR                                                     !4
         50        DO_ICALL                                                     
   26    51        INIT_FCALL                                                   'json_encode'
         52        INIT_METHOD_CALL                                             !2, 'format'
         53        SEND_VAL_EX                                                  'U.u'
         54        DO_FCALL                                          0  $20     
         55        CAST                                              5  ~21     $20
         56        SEND_VAL                                                     ~21
         57        DO_ICALL                                             $22     
         58        ASSIGN                                                       !3, $22
   28    59        INIT_FCALL                                                   'var_dump'
         60        SEND_VAR                                                     !0
         61        SEND_VAR                                                     !3
         62        IS_IDENTICAL                                         ~24     !0, !3
         63        SEND_VAL                                                     ~24
         64        DO_ICALL                                                     
   30    65        ECHO                                                         '%0A'
   31    66      > RETURN                                                       null

End of Dynamic Function 0

Generated using Vulcan Logic Dumper, using php 8.5.0


preferences:
127.65 ms | 486 KiB | 10 Q