3v4l.org

run code in 300+ PHP versions simultaneously
<?php class DTBug { private $intervals = [ '1min' => null, '1day' => null, '1wk' => null, ]; private $inspectCalc; public function __construct($inspectStored=false, $inspectCalc=false) { $this->inspectCalc = $inspectCalc; $this->intervals['1min'] = new \DateInterval("PT1M"); $this->intervals['1day'] = new \DateInterval("P1D"); $this->intervals['1wk'] = new \DateInterval("P7D"); if ($inspectStored) { array_map(function($s) { var_export($s, true); }, $this->intervals); } } public function compare(DateTimeInterface $start, DateTimeInterface $end) { $diff = $start->diff($end, true); if ($this->inspectCalc) { var_export($diff, true); } if ($diff < $this->intervals['1min']) { $op = "less than a minute"; } elseif ($diff < $this->intervals['1day']) { $op = "between an minute and a day"; } elseif ($diff < $this->intervals['1wk']) { $op = "between a day and a week"; } else { $op = "greater than a week"; } $this->output($start, $end, $op); } private function output(DateTimeInterface $start, DateTimeInterface $end, $op) { echo $start->format("Y-m-d H:i:s")." is ".$op." from ".$end->format("Y-m-d H:i:s")."\n"; } } echo "\nTesting without looking at the intervals:\n"; $bug = new DTBug; $bug->compare(new DateTimeImmutable("2016-05-16 09:12:32"), new DateTimeImmutable("2016-05-16 09:13:35")); // 1min 3sec $bug->compare(new DateTimeImmutable("2016-05-16 09:12:32"), new DateTimeImmutable("2016-05-16 12:13:35")); // 3hrs 1min 3sec $bug->compare(new DateTimeImmutable("2016-05-16 09:12:32"), new DateTimeImmutable("2016-05-18 09:13:35")); // 2day 1min 3sec $bug->compare(new DateTimeImmutable("2016-05-16 09:12:32"), new DateTimeImmutable("2016-07-16 09:13:35")); // 2mon 1min 3sec echo "\nTesting whilst looking at the stored intervals:\n"; $debug = new DTBug(true); $debug->compare(new DateTimeImmutable("2016-05-16 09:12:32"), new DateTimeImmutable("2016-05-16 09:13:35")); // 1min 3sec $debug->compare(new DateTimeImmutable("2016-05-16 09:12:32"), new DateTimeImmutable("2016-05-16 12:13:35")); // 3hrs 1min 3sec $debug->compare(new DateTimeImmutable("2016-05-16 09:12:32"), new DateTimeImmutable("2016-05-18 09:13:35")); // 2day 1min 3sec $debug->compare(new DateTimeImmutable("2016-05-16 09:12:32"), new DateTimeImmutable("2016-07-16 09:13:35")); // 2mon 1min 3sec echo "\nTesting whilst looking at the calculated intervals only:\n"; $debug = new DTBug(false, true); $debug->compare(new DateTimeImmutable("2016-05-16 09:12:32"), new DateTimeImmutable("2016-05-16 09:13:35")); // 1min 3sec $debug->compare(new DateTimeImmutable("2016-05-16 09:12:32"), new DateTimeImmutable("2016-05-16 12:13:35")); // 3hrs 1min 3sec $debug->compare(new DateTimeImmutable("2016-05-16 09:12:32"), new DateTimeImmutable("2016-05-18 09:13:35")); // 2day 1min 3sec $debug->compare(new DateTimeImmutable("2016-05-16 09:12:32"), new DateTimeImmutable("2016-07-16 09:13:35")); // 2mon 1min 3sec echo "\nTesting whilst looking at the both intervals:\n"; $debug = new DTBug(true, true); $debug->compare(new DateTimeImmutable("2016-05-16 09:12:32"), new DateTimeImmutable("2016-05-16 09:13:35")); // 1min 3sec $debug->compare(new DateTimeImmutable("2016-05-16 09:12:32"), new DateTimeImmutable("2016-05-16 12:13:35")); // 3hrs 1min 3sec $debug->compare(new DateTimeImmutable("2016-05-16 09:12:32"), new DateTimeImmutable("2016-05-18 09:13:35")); // 2day 1min 3sec $debug->compare(new DateTimeImmutable("2016-05-16 09:12:32"), new DateTimeImmutable("2016-07-16 09:13:35")); // 2mon 1min 3sec
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/TrPvp
function name:  (null)
number of ops:  182
compiled vars:  !0 = $bug, !1 = $debug
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   47     0  E >   ECHO                                                     '%0ATesting+without+looking+at+the+intervals%3A%0A'
   48     1        NEW                                              $2      'DTBug'
          2        DO_FCALL                                      0          
          3        ASSIGN                                                   !0, $2
   50     4        INIT_METHOD_CALL                                         !0, 'compare'
          5        NEW                                              $5      'DateTimeImmutable'
          6        SEND_VAL_EX                                              '2016-05-16+09%3A12%3A32'
          7        DO_FCALL                                      0          
          8        SEND_VAR_NO_REF_EX                                       $5
          9        NEW                                              $7      'DateTimeImmutable'
         10        SEND_VAL_EX                                              '2016-05-16+09%3A13%3A35'
         11        DO_FCALL                                      0          
         12        SEND_VAR_NO_REF_EX                                       $7
         13        DO_FCALL                                      0          
   51    14        INIT_METHOD_CALL                                         !0, 'compare'
         15        NEW                                              $10     'DateTimeImmutable'
         16        SEND_VAL_EX                                              '2016-05-16+09%3A12%3A32'
         17        DO_FCALL                                      0          
         18        SEND_VAR_NO_REF_EX                                       $10
         19        NEW                                              $12     'DateTimeImmutable'
         20        SEND_VAL_EX                                              '2016-05-16+12%3A13%3A35'
         21        DO_FCALL                                      0          
         22        SEND_VAR_NO_REF_EX                                       $12
         23        DO_FCALL                                      0          
   52    24        INIT_METHOD_CALL                                         !0, 'compare'
         25        NEW                                              $15     'DateTimeImmutable'
         26        SEND_VAL_EX                                              '2016-05-16+09%3A12%3A32'
         27        DO_FCALL                                      0          
         28        SEND_VAR_NO_REF_EX                                       $15
         29        NEW                                              $17     'DateTimeImmutable'
         30        SEND_VAL_EX                                              '2016-05-18+09%3A13%3A35'
         31        DO_FCALL                                      0          
         32        SEND_VAR_NO_REF_EX                                       $17
         33        DO_FCALL                                      0          
   53    34        INIT_METHOD_CALL                                         !0, 'compare'
         35        NEW                                              $20     'DateTimeImmutable'
         36        SEND_VAL_EX                                              '2016-05-16+09%3A12%3A32'
         37        DO_FCALL                                      0          
         38        SEND_VAR_NO_REF_EX                                       $20
         39        NEW                                              $22     'DateTimeImmutable'
         40        SEND_VAL_EX                                              '2016-07-16+09%3A13%3A35'
         41        DO_FCALL                                      0          
         42        SEND_VAR_NO_REF_EX                                       $22
         43        DO_FCALL                                      0          
   55    44        ECHO                                                     '%0ATesting+whilst+looking+at+the+stored+intervals%3A%0A'
   56    45        NEW                                              $25     'DTBug'
         46        SEND_VAL_EX                                              <true>
         47        DO_FCALL                                      0          
         48        ASSIGN                                                   !1, $25
   58    49        INIT_METHOD_CALL                                         !1, 'compare'
         50        NEW                                              $28     'DateTimeImmutable'
         51        SEND_VAL_EX                                              '2016-05-16+09%3A12%3A32'
         52        DO_FCALL                                      0          
         53        SEND_VAR_NO_REF_EX                                       $28
         54        NEW                                              $30     'DateTimeImmutable'
         55        SEND_VAL_EX                                              '2016-05-16+09%3A13%3A35'
         56        DO_FCALL                                      0          
         57        SEND_VAR_NO_REF_EX                                       $30
         58        DO_FCALL                                      0          
   59    59        INIT_METHOD_CALL                                         !1, 'compare'
         60        NEW                                              $33     'DateTimeImmutable'
         61        SEND_VAL_EX                                              '2016-05-16+09%3A12%3A32'
         62        DO_FCALL                                      0          
         63        SEND_VAR_NO_REF_EX                                       $33
         64        NEW                                              $35     'DateTimeImmutable'
         65        SEND_VAL_EX                                              '2016-05-16+12%3A13%3A35'
         66        DO_FCALL                                      0          
         67        SEND_VAR_NO_REF_EX                                       $35
         68        DO_FCALL                                      0          
   60    69        INIT_METHOD_CALL                                         !1, 'compare'
         70        NEW                                              $38     'DateTimeImmutable'
         71        SEND_VAL_EX                                              '2016-05-16+09%3A12%3A32'
         72        DO_FCALL                                      0          
         73        SEND_VAR_NO_REF_EX                                       $38
         74        NEW                                              $40     'DateTimeImmutable'
         75        SEND_VAL_EX                                              '2016-05-18+09%3A13%3A35'
         76        DO_FCALL                                      0          
         77        SEND_VAR_NO_REF_EX                                       $40
         78        DO_FCALL                                      0          
   61    79        INIT_METHOD_CALL                                         !1, 'compare'
         80        NEW                                              $43     'DateTimeImmutable'
         81        SEND_VAL_EX                                              '2016-05-16+09%3A12%3A32'
         82        DO_FCALL                                      0          
         83        SEND_VAR_NO_REF_EX                                       $43
         84        NEW                                              $45     'DateTimeImmutable'
         85        SEND_VAL_EX                                              '2016-07-16+09%3A13%3A35'
         86        DO_FCALL                                      0          
         87        SEND_VAR_NO_REF_EX                                       $45
         88        DO_FCALL                                      0          
   63    89        ECHO                                                     '%0ATesting+whilst+looking+at+the+calculated+intervals+only%3A%0A'
   64    90        NEW                                              $48     'DTBug'
         91        SEND_VAL_EX                                              <false>
         92        SEND_VAL_EX                                              <true>
         93        DO_FCALL                                      0          
         94        ASSIGN                                                   !1, $48
   66    95        INIT_METHOD_CALL                                         !1, 'compare'
         96        NEW                                              $51     'DateTimeImmutable'
         97        SEND_VAL_EX                                              '2016-05-16+09%3A12%3A32'
         98        DO_FCALL                                      0          
         99        SEND_VAR_NO_REF_EX                                       $51
        100        NEW                                              $53     'DateTimeImmutable'
        101        SEND_VAL_EX                                              '2016-05-16+09%3A13%3A35'
        102        DO_FCALL                                      0          
        103        SEND_VAR_NO_REF_EX                                       $53
        104        DO_FCALL                                      0          
   67   105        INIT_METHOD_CALL                                         !1, 'compare'
        106        NEW                                              $56     'DateTimeImmutable'
        107        SEND_VAL_EX                                              '2016-05-16+09%3A12%3A32'
        108        DO_FCALL                                      0          
        109        SEND_VAR_NO_REF_EX                                       $56
        110        NEW                                              $58     'DateTimeImmutable'
        111        SEND_VAL_EX                                              '2016-05-16+12%3A13%3A35'
        112        DO_FCALL                                      0          
        113        SEND_VAR_NO_REF_EX                                       $58
        114        DO_FCALL                                      0          
   68   115        INIT_METHOD_CALL                                         !1, 'compare'
        116        NEW                                              $61     'DateTimeImmutable'
        117        SEND_VAL_EX                                              '2016-05-16+09%3A12%3A32'
        118        DO_FCALL                                      0          
        119        SEND_VAR_NO_REF_EX                                       $61
        120        NEW                                              $63     'DateTimeImmutable'
        121        SEND_VAL_EX                                              '2016-05-18+09%3A13%3A35'
        122        DO_FCALL                                      0          
        123        SEND_VAR_NO_REF_EX                                       $63
        124        DO_FCALL                                      0          
   69   125        INIT_METHOD_CALL                                         !1, 'compare'
        126        NEW                                              $66     'DateTimeImmutable'
        127        SEND_VAL_EX                                              '2016-05-16+09%3A12%3A32'
        128        DO_FCALL                                      0          
        129        SEND_VAR_NO_REF_EX                                       $66
        130        NEW                                              $68     'DateTimeImmutable'
        131        SEND_VAL_EX                                              '2016-07-16+09%3A13%3A35'
        132        DO_FCALL                                      0          
        133        SEND_VAR_NO_REF_EX                                       $68
        134        DO_FCALL                                      0          
   71   135        ECHO                                                     '%0ATesting+whilst+looking+at+the+both+intervals%3A%0A'
   72   136        NEW                                              $71     'DTBug'
        137        SEND_VAL_EX                                              <true>
        138        SEND_VAL_EX                                              <true>
        139        DO_FCALL                                      0          
        140        ASSIGN                                                   !1, $71
   74   141        INIT_METHOD_CALL                                         !1, 'compare'
        142        NEW                                              $74     'DateTimeImmutable'
        143        SEND_VAL_EX                                              '2016-05-16+09%3A12%3A32'
        144        DO_FCALL                                      0          
        145        SEND_VAR_NO_REF_EX                                       $74
        146        NEW                                              $76     'DateTimeImmutable'
        147        SEND_VAL_EX                                              '2016-05-16+09%3A13%3A35'
        148        DO_FCALL                                      0          
        149        SEND_VAR_NO_REF_EX                                       $76
        150        DO_FCALL                                      0          
   75   151        INIT_METHOD_CALL                                         !1, 'compare'
        152        NEW                                              $79     'DateTimeImmutable'
        153        SEND_VAL_EX                                              '2016-05-16+09%3A12%3A32'
        154        DO_FCALL                                      0          
        155        SEND_VAR_NO_REF_EX                                       $79
        156        NEW                                              $81     'DateTimeImmutable'
        157        SEND_VAL_EX                                              '2016-05-16+12%3A13%3A35'
        158        DO_FCALL                                      0          
        159        SEND_VAR_NO_REF_EX                                       $81
        160        DO_FCALL                                      0          
   76   161        INIT_METHOD_CALL                                         !1, 'compare'
        162        NEW                                              $84     'DateTimeImmutable'
        163        SEND_VAL_EX                                              '2016-05-16+09%3A12%3A32'
        164        DO_FCALL                                      0          
        165        SEND_VAR_NO_REF_EX                                       $84
        166        NEW                                              $86     'DateTimeImmutable'
        167        SEND_VAL_EX                                              '2016-05-18+09%3A13%3A35'
        168        DO_FCALL                                      0          
        169        SEND_VAR_NO_REF_EX                                       $86
        170        DO_FCALL                                      0          
   77   171        INIT_METHOD_CALL                                         !1, 'compare'
        172        NEW                                              $89     'DateTimeImmutable'
        173        SEND_VAL_EX                                              '2016-05-16+09%3A12%3A32'
        174        DO_FCALL                                      0          
        175        SEND_VAR_NO_REF_EX                                       $89
        176        NEW                                              $91     'DateTimeImmutable'
        177        SEND_VAL_EX                                              '2016-07-16+09%3A13%3A35'
        178        DO_FCALL                                      0          
        179        SEND_VAR_NO_REF_EX                                       $91
        180        DO_FCALL                                      0          
        181      > RETURN                                                   1

Function %00%7Bclosure%7D%2Fin%2FTrPvp%3A18%240:
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/TrPvp
function name:  {closure}
number of ops:  6
compiled vars:  !0 = $s
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   18     0  E >   RECV                                             !0      
          1        INIT_FCALL                                               'var_export'
          2        SEND_VAR                                                 !0
          3        SEND_VAL                                                 <true>
          4        DO_ICALL                                                 
          5      > RETURN                                                   null

End of function %00%7Bclosure%7D%2Fin%2FTrPvp%3A18%240

Class DTBug:
Function __construct:
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 43) Position 1 = 23, Position 2 = 29
Branch analysis from position: 23
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 29
filename:       /in/TrPvp
function name:  __construct
number of ops:  30
compiled vars:  !0 = $inspectStored, !1 = $inspectCalc
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   11     0  E >   RECV_INIT                                        !0      <false>
          1        RECV_INIT                                        !1      <false>
   13     2        ASSIGN_OBJ                                               'inspectCalc'
          3        OP_DATA                                                  !1
   14     4        NEW                                              $5      'DateInterval'
          5        SEND_VAL_EX                                              'PT1M'
          6        DO_FCALL                                      0          
          7        FETCH_OBJ_W                                      $3      'intervals'
          8        ASSIGN_DIM                                               $3, '1min'
          9        OP_DATA                                                  $5
   15    10        NEW                                              $9      'DateInterval'
         11        SEND_VAL_EX                                              'P1D'
         12        DO_FCALL                                      0          
         13        FETCH_OBJ_W                                      $7      'intervals'
         14        ASSIGN_DIM                                               $7, '1day'
         15        OP_DATA                                                  $9
   16    16        NEW                                              $13     'DateInterval'
         17        SEND_VAL_EX                                              'P7D'
         18        DO_FCALL                                      0          
         19        FETCH_OBJ_W                                      $11     'intervals'
         20        ASSIGN_DIM                                               $11, '1wk'
         21        OP_DATA                                                  $13
   17    22      > JMPZ                                                     !0, ->29
   18    23    >   INIT_FCALL                                               'array_map'
         24        DECLARE_LAMBDA_FUNCTION                                  '%00%7Bclosure%7D%2Fin%2FTrPvp%3A18%240'
         25        SEND_VAL                                                 ~15
         26        FETCH_OBJ_R                                      ~16     'intervals'
         27        SEND_VAL                                                 ~16
         28        DO_ICALL                                                 
   20    29    > > RETURN                                                   null

End of function __construct

Function compare:
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 43) Position 1 = 9, Position 2 = 13
Branch analysis from position: 9
2 jumps found. (Code = 43) Position 1 = 17, Position 2 = 19
Branch analysis from position: 17
1 jumps found. (Code = 42) Position 1 = 32
Branch analysis from position: 32
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 19
2 jumps found. (Code = 43) Position 1 = 23, Position 2 = 25
Branch analysis from position: 23
1 jumps found. (Code = 42) Position 1 = 32
Branch analysis from position: 32
Branch analysis from position: 25
2 jumps found. (Code = 43) Position 1 = 29, Position 2 = 31
Branch analysis from position: 29
1 jumps found. (Code = 42) Position 1 = 32
Branch analysis from position: 32
Branch analysis from position: 31
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 13
filename:       /in/TrPvp
function name:  compare
number of ops:  38
compiled vars:  !0 = $start, !1 = $end, !2 = $diff, !3 = $op
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   22     0  E >   RECV                                             !0      
          1        RECV                                             !1      
   24     2        INIT_METHOD_CALL                                         !0, 'diff'
          3        SEND_VAR_EX                                              !1
          4        SEND_VAL_EX                                              <true>
          5        DO_FCALL                                      0  $4      
          6        ASSIGN                                                   !2, $4
   25     7        FETCH_OBJ_R                                      ~6      'inspectCalc'
          8      > JMPZ                                                     ~6, ->13
   26     9    >   INIT_FCALL                                               'var_export'
         10        SEND_VAR                                                 !2
         11        SEND_VAL                                                 <true>
         12        DO_ICALL                                                 
   29    13    >   FETCH_OBJ_R                                      ~8      'intervals'
         14        FETCH_DIM_R                                      ~9      ~8, '1min'
         15        IS_SMALLER                                               !2, ~9
         16      > JMPZ                                                     ~10, ->19
   30    17    >   ASSIGN                                                   !3, 'less+than+a+minute'
         18      > JMP                                                      ->32
   31    19    >   FETCH_OBJ_R                                      ~12     'intervals'
         20        FETCH_DIM_R                                      ~13     ~12, '1day'
         21        IS_SMALLER                                               !2, ~13
         22      > JMPZ                                                     ~14, ->25
   32    23    >   ASSIGN                                                   !3, 'between+an+minute+and+a+day'
         24      > JMP                                                      ->32
   33    25    >   FETCH_OBJ_R                                      ~16     'intervals'
         26        FETCH_DIM_R                                      ~17     ~16, '1wk'
         27        IS_SMALLER                                               !2, ~17
         28      > JMPZ                                                     ~18, ->31
   34    29    >   ASSIGN                                                   !3, 'between+a+day+and+a+week'
         30      > JMP                                                      ->32
   36    31    >   ASSIGN                                                   !3, 'greater+than+a+week'
   38    32    >   INIT_METHOD_CALL                                         'output'
         33        SEND_VAR_EX                                              !0
         34        SEND_VAR_EX                                              !1
         35        SEND_VAR_EX                                              !3
         36        DO_FCALL                                      0          
   39    37      > RETURN                                                   null

End of function compare

Function output:
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/TrPvp
function name:  output
number of ops:  16
compiled vars:  !0 = $start, !1 = $end, !2 = $op
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   41     0  E >   RECV                                             !0      
          1        RECV                                             !1      
          2        RECV                                             !2      
   43     3        INIT_METHOD_CALL                                         !0, 'format'
          4        SEND_VAL_EX                                              'Y-m-d+H%3Ai%3As'
          5        DO_FCALL                                      0  $3      
          6        CONCAT                                           ~4      $3, '+is+'
          7        CONCAT                                           ~5      ~4, !2
          8        CONCAT                                           ~6      ~5, '+from+'
          9        INIT_METHOD_CALL                                         !1, 'format'
         10        SEND_VAL_EX                                              'Y-m-d+H%3Ai%3As'
         11        DO_FCALL                                      0  $7      
         12        CONCAT                                           ~8      ~6, $7
         13        CONCAT                                           ~9      ~8, '%0A'
         14        ECHO                                                     ~9
   44    15      > RETURN                                                   null

End of function output

End of class DTBug.

Generated using Vulcan Logic Dumper, using php 8.0.0


preferences:
185.41 ms | 1420 KiB | 17 Q