3v4l.org

run code in 300+ PHP versions simultaneously
<?php function moon($time = null, $mps = 2551443) { $time = is_null($time) ? 0 : (time() - $time); $first_moon = time()-mktime(0, 0, 0, 0, 0, 1923); // first moon (1923) date_default_timezone_set("UTC"); return [ 'date' => date_create_from_format('U', time()-$time)->format('Y-m-d H:i:s'), 'lunation' => ($first_moon-$time)/$mps, 'phase' => ($time - $mps * intval($time / $mps)) / $mps ]; } $mps = 2551443; // moon phase in seconds (29 days, 12 hours, 44 mins, 3 secs) $test = function () use ($mps) { $begin = new DateTime('2001-01-24'); $end = new DateTime('2004-12-12'); $dtia = date_create_from_format('U', 0); $dtib = date_create_from_format('U', $mps); $interval = new DateInterval('P'.$dtia->diff($dtib)->format('%aDT%hH%iM%sS')); $daterange = new DatePeriod($begin, $interval ,$end); foreach($daterange as $date){ yield moon($date->format('U')); } }; foreach ($test() as $result) { print_r($result); }
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 77) Position 1 = 7, Position 2 = 12
Branch analysis from position: 7
2 jumps found. (Code = 78) Position 1 = 8, Position 2 = 12
Branch analysis from position: 8
1 jumps found. (Code = 42) Position 1 = 7
Branch analysis from position: 7
Branch analysis from position: 12
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 12
filename:       /in/HI6Lv
function name:  (null)
number of ops:  14
compiled vars:  !0 = $mps, !1 = $test, !2 = $result
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   16     0  E >   ASSIGN                                                   !0, 2551443
   18     1        DECLARE_LAMBDA_FUNCTION                                  '%00%7Bclosure%7D%2Fin%2FHI6Lv%3A18%240'
          2        BIND_LEXICAL                                             ~4, !0
          3        ASSIGN                                                   !1, ~4
   33     4        INIT_DYNAMIC_CALL                                        !1
          5        DO_FCALL                                      0  $6      
          6      > FE_RESET_R                                       $7      $6, ->12
          7    > > FE_FETCH_R                                               $7, !2, ->12
   34     8    >   INIT_FCALL                                               'print_r'
          9        SEND_VAR                                                 !2
         10        DO_ICALL                                                 
   33    11      > JMP                                                      ->7
         12    >   FE_FREE                                                  $7
   35    13      > RETURN                                                   1

Function moon:
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 43) Position 1 = 4, Position 2 = 6
Branch analysis from position: 4
1 jumps found. (Code = 42) Position 1 = 10
Branch analysis from position: 10
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 6
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/HI6Lv
function name:  moon
number of ops:  48
compiled vars:  !0 = $time, !1 = $mps, !2 = $first_moon
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
    3     0  E >   RECV_INIT                                        !0      null
          1        RECV_INIT                                        !1      2551443
    5     2        TYPE_CHECK                                    2          !0
          3      > JMPZ                                                     ~3, ->6
          4    >   QM_ASSIGN                                        ~4      0
          5      > JMP                                                      ->10
          6    >   INIT_FCALL                                               'time'
          7        DO_ICALL                                         $5      
          8        SUB                                              ~6      $5, !0
          9        QM_ASSIGN                                        ~4      ~6
         10    >   ASSIGN                                                   !0, ~4
    6    11        INIT_FCALL                                               'time'
         12        DO_ICALL                                         $8      
         13        INIT_FCALL                                               'mktime'
         14        SEND_VAL                                                 0
         15        SEND_VAL                                                 0
         16        SEND_VAL                                                 0
         17        SEND_VAL                                                 0
         18        SEND_VAL                                                 0
         19        SEND_VAL                                                 1923
         20        DO_ICALL                                         $9      
         21        SUB                                              ~10     $8, $9
         22        ASSIGN                                                   !2, ~10
    8    23        INIT_FCALL                                               'date_default_timezone_set'
         24        SEND_VAL                                                 'UTC'
         25        DO_ICALL                                                 
   10    26        INIT_FCALL                                               'date_create_from_format'
         27        SEND_VAL                                                 'U'
         28        INIT_FCALL                                               'time'
         29        DO_ICALL                                         $13     
         30        SUB                                              ~14     $13, !0
         31        SEND_VAL                                                 ~14
         32        DO_ICALL                                         $15     
         33        INIT_METHOD_CALL                                         $15, 'format'
         34        SEND_VAL_EX                                              'Y-m-d+H%3Ai%3As'
         35        DO_FCALL                                      0  $16     
         36        INIT_ARRAY                                       ~17     $16, 'date'
   11    37        SUB                                              ~18     !2, !0
         38        DIV                                              ~19     ~18, !1
         39        ADD_ARRAY_ELEMENT                                ~17     ~19, 'lunation'
   12    40        DIV                                              ~20     !0, !1
         41        CAST                                          4  ~21     ~20
         42        MUL                                              ~22     !1, ~21
         43        SUB                                              ~23     !0, ~22
         44        DIV                                              ~24     ~23, !1
         45        ADD_ARRAY_ELEMENT                                ~17     ~24, 'phase'
         46      > RETURN                                                   ~17
   14    47*     > RETURN                                                   null

End of function moon

Function %00%7Bclosure%7D%2Fin%2FHI6Lv%3A18%240:
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 77) Position 1 = 38, Position 2 = 47
Branch analysis from position: 38
2 jumps found. (Code = 78) Position 1 = 39, Position 2 = 47
Branch analysis from position: 39
1 jumps found. (Code = 42) Position 1 = 38
Branch analysis from position: 38
Branch analysis from position: 47
1 jumps found. (Code = 161) Position 1 = -2
Branch analysis from position: 47
filename:       /in/HI6Lv
function name:  {closure}
number of ops:  49
compiled vars:  !0 = $mps, !1 = $begin, !2 = $end, !3 = $dtia, !4 = $dtib, !5 = $interval, !6 = $daterange, !7 = $date
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   18     0  E >   GENERATOR_CREATE                                         
          1        BIND_STATIC                                              !0
   19     2        NEW                                              $8      'DateTime'
          3        SEND_VAL_EX                                              '2001-01-24'
          4        DO_FCALL                                      0          
          5        ASSIGN                                                   !1, $8
   20     6        NEW                                              $11     'DateTime'
          7        SEND_VAL_EX                                              '2004-12-12'
          8        DO_FCALL                                      0          
          9        ASSIGN                                                   !2, $11
   22    10        INIT_FCALL                                               'date_create_from_format'
         11        SEND_VAL                                                 'U'
         12        SEND_VAL                                                 0
         13        DO_ICALL                                         $14     
         14        ASSIGN                                                   !3, $14
   23    15        INIT_FCALL                                               'date_create_from_format'
         16        SEND_VAL                                                 'U'
         17        SEND_VAR                                                 !0
         18        DO_ICALL                                         $16     
         19        ASSIGN                                                   !4, $16
   25    20        NEW                                              $18     'DateInterval'
         21        INIT_METHOD_CALL                                         !3, 'diff'
         22        SEND_VAR_EX                                              !4
         23        DO_FCALL                                      0  $19     
         24        INIT_METHOD_CALL                                         $19, 'format'
         25        SEND_VAL_EX                                              '%25aDT%25hH%25iM%25sS'
         26        DO_FCALL                                      0  $20     
         27        CONCAT                                           ~21     'P', $20
         28        SEND_VAL_EX                                              ~21
         29        DO_FCALL                                      0          
         30        ASSIGN                                                   !5, $18
   26    31        NEW                                              $24     'DatePeriod'
         32        SEND_VAR_EX                                              !1
         33        SEND_VAR_EX                                              !5
         34        SEND_VAR_EX                                              !2
         35        DO_FCALL                                      0          
         36        ASSIGN                                                   !6, $24
   28    37      > FE_RESET_R                                       $27     !6, ->47
         38    > > FE_FETCH_R                                               $27, !7, ->47
   29    39    >   INIT_FCALL                                               'moon'
         40        INIT_METHOD_CALL                                         !7, 'format'
         41        SEND_VAL_EX                                              'U'
         42        DO_FCALL                                      0  $28     
         43        SEND_VAR                                                 $28
         44        DO_FCALL                                      0  $29     
         45        YIELD                                                    $29
   28    46      > JMP                                                      ->38
         47    >   FE_FREE                                                  $27
   31    48      > GENERATOR_RETURN                                         

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

Generated using Vulcan Logic Dumper, using php 8.0.0


preferences:
156.12 ms | 1411 KiB | 24 Q