3v4l.org

run code in 300+ PHP versions simultaneously
<?php class PayDay { public function __construct($Ymd = null) { $this->date = $Ymd ?: date("Y-m-d"); $this->holiday_calendar = [ (object)["holiday" => "New Year's Day", "holidayDate" => "2018-01-01"], (object)["holiday" => "Republic Day", "holidayDate" => "2018-01-26"], (object)["holiday" => "Holi", "holidayDate" => "2018-03-02"] ]; $this->payroll_days_list = [ (object)["payrollDay" => "Mon", "isPayrollDay" => "Y"], (object)["payrollDay" => "Tue", "isPayrollDay" => "Y"], (object)["payrollDay" => "Wed", "isPayrollDay" => "Y"], (object)["payrollDay" => "Thu", "isPayrollDay" => "Y"], (object)["payrollDay" => "Fri", "isPayrollDay" => "Y"], (object)["payrollDay" => "Sat", "isPayrollDay" => "N"], (object)["payrollDay" => "Sun", "isPayrollDay" => "N"] ]; echo "Starting Date: ",$this->date,"\n"; } public function getPayDate() { $hc_match = false; foreach (array_reverse($this->holiday_calendar) as $hc) { if ($hc->holidayDate == $this->date) { $hc_match = true; //echo "Avoided: ",$hc->holiday,"\n"; $this->loseOneDay(); //echo "New Date: ",$this->date,"\n"; } elseif ($hc_match) { break; } } $pdl_match = false; foreach (array_reverse($this->payroll_days_list) as $pdl) { if ($pdl->payrollDay == date("D", strtotime($this->date)) && $pdl->isPayrollDay == "N") { $pdl_match = true; //echo "Avoided: ",$pdl->payrollDay,"\n"; $this->loseOneDay(); //echo "New Date: ",$this->date,"\n"; } elseif ($pdl_match) { break; } } //echo $this->date; if ($hc_match || $pdl_match) { //echo "\tRECURSE\n"; $this->getPayDate(); } return $this->date; } public function loseOneDay(){ return $this->date = date("Y-m-d", strtotime($this->date." -1 day")); } } $date = new PayDay("2018-03-04"); echo "Adjusted Date: ",$date->getPayDate();
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/amkvS
function name:  (null)
number of ops:  9
compiled vars:  !0 = $date
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   63     0  E >   NEW                                              $1      'PayDay'
          1        SEND_VAL_EX                                              '2018-03-04'
          2        DO_FCALL                                      0          
          3        ASSIGN                                                   !0, $1
   64     4        ECHO                                                     'Adjusted+Date%3A+'
          5        INIT_METHOD_CALL                                         !0, 'getPayDate'
          6        DO_FCALL                                      0  $4      
          7        ECHO                                                     $4
          8      > RETURN                                                   1

Class PayDay:
Function __construct:
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/amkvS
function name:  __construct
number of ops:  37
compiled vars:  !0 = $Ymd
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
    4     0  E >   RECV_INIT                                        !0      null
    5     1        JMP_SET                                          ~2      !0, ->6
          2        INIT_FCALL                                               'date'
          3        SEND_VAL                                                 'Y-m-d'
          4        DO_ICALL                                         $3      
          5        QM_ASSIGN                                        ~2      $3
          6        ASSIGN_OBJ                                               'date'
          7        OP_DATA                                                  ~2
    8     8        CAST                                          8  ~5      <array>
          9        INIT_ARRAY                                       ~6      ~5
    9    10        CAST                                          8  ~7      <array>
         11        ADD_ARRAY_ELEMENT                                ~6      ~7
   10    12        CAST                                          8  ~8      <array>
         13        ADD_ARRAY_ELEMENT                                ~6      ~8
    7    14        ASSIGN_OBJ                                               'holiday_calendar'
   10    15        OP_DATA                                                  ~6
   14    16        CAST                                          8  ~10     <array>
         17        INIT_ARRAY                                       ~11     ~10
   15    18        CAST                                          8  ~12     <array>
         19        ADD_ARRAY_ELEMENT                                ~11     ~12
   16    20        CAST                                          8  ~13     <array>
         21        ADD_ARRAY_ELEMENT                                ~11     ~13
   17    22        CAST                                          8  ~14     <array>
         23        ADD_ARRAY_ELEMENT                                ~11     ~14
   18    24        CAST                                          8  ~15     <array>
         25        ADD_ARRAY_ELEMENT                                ~11     ~15
   19    26        CAST                                          8  ~16     <array>
         27        ADD_ARRAY_ELEMENT                                ~11     ~16
   20    28        CAST                                          8  ~17     <array>
         29        ADD_ARRAY_ELEMENT                                ~11     ~17
   13    30        ASSIGN_OBJ                                               'payroll_days_list'
   20    31        OP_DATA                                                  ~11
   23    32        ECHO                                                     'Starting+Date%3A+'
         33        FETCH_OBJ_R                                      ~18     'date'
         34        ECHO                                                     ~18
         35        ECHO                                                     '%0A'
   24    36      > RETURN                                                   null

End of function __construct

Function getpaydate:
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 77) Position 1 = 6, Position 2 = 18
Branch analysis from position: 6
2 jumps found. (Code = 78) Position 1 = 7, Position 2 = 18
Branch analysis from position: 7
2 jumps found. (Code = 43) Position 1 = 11, Position 2 = 15
Branch analysis from position: 11
1 jumps found. (Code = 42) Position 1 = 17
Branch analysis from position: 17
1 jumps found. (Code = 42) Position 1 = 6
Branch analysis from position: 6
Branch analysis from position: 15
2 jumps found. (Code = 43) Position 1 = 16, Position 2 = 17
Branch analysis from position: 16
1 jumps found. (Code = 42) Position 1 = 18
Branch analysis from position: 18
2 jumps found. (Code = 77) Position 1 = 25, Position 2 = 48
Branch analysis from position: 25
2 jumps found. (Code = 78) Position 1 = 26, Position 2 = 48
Branch analysis from position: 26
2 jumps found. (Code = 46) Position 1 = 37, Position 2 = 40
Branch analysis from position: 37
2 jumps found. (Code = 43) Position 1 = 41, Position 2 = 45
Branch analysis from position: 41
1 jumps found. (Code = 42) Position 1 = 47
Branch analysis from position: 47
1 jumps found. (Code = 42) Position 1 = 25
Branch analysis from position: 25
Branch analysis from position: 45
2 jumps found. (Code = 43) Position 1 = 46, Position 2 = 47
Branch analysis from position: 46
1 jumps found. (Code = 42) Position 1 = 48
Branch analysis from position: 48
2 jumps found. (Code = 47) Position 1 = 50, Position 2 = 51
Branch analysis from position: 50
2 jumps found. (Code = 43) Position 1 = 52, Position 2 = 54
Branch analysis from position: 52
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 54
Branch analysis from position: 51
Branch analysis from position: 47
Branch analysis from position: 40
Branch analysis from position: 48
Branch analysis from position: 48
Branch analysis from position: 17
Branch analysis from position: 18
Branch analysis from position: 18
filename:       /in/amkvS
function name:  getPayDate
number of ops:  57
compiled vars:  !0 = $hc_match, !1 = $hc, !2 = $pdl_match, !3 = $pdl
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   27     0  E >   ASSIGN                                                   !0, <false>
   28     1        INIT_FCALL                                               'array_reverse'
          2        FETCH_OBJ_R                                      ~5      'holiday_calendar'
          3        SEND_VAL                                                 ~5
          4        DO_ICALL                                         $6      
          5      > FE_RESET_R                                       $7      $6, ->18
          6    > > FE_FETCH_R                                               $7, !1, ->18
   29     7    >   FETCH_OBJ_R                                      ~8      !1, 'holidayDate'
          8        FETCH_OBJ_R                                      ~9      'date'
          9        IS_EQUAL                                                 ~8, ~9
         10      > JMPZ                                                     ~10, ->15
   30    11    >   ASSIGN                                                   !0, <true>
   32    12        INIT_METHOD_CALL                                         'loseOneDay'
         13        DO_FCALL                                      0          
   29    14      > JMP                                                      ->17
   34    15    > > JMPZ                                                     !0, ->17
   35    16    > > JMP                                                      ->18
   28    17    > > JMP                                                      ->6
         18    >   FE_FREE                                                  $7
   39    19        ASSIGN                                                   !2, <false>
   40    20        INIT_FCALL                                               'array_reverse'
         21        FETCH_OBJ_R                                      ~14     'payroll_days_list'
         22        SEND_VAL                                                 ~14
         23        DO_ICALL                                         $15     
         24      > FE_RESET_R                                       $16     $15, ->48
         25    > > FE_FETCH_R                                               $16, !3, ->48
   41    26    >   FETCH_OBJ_R                                      ~17     !3, 'payrollDay'
         27        INIT_FCALL                                               'date'
         28        SEND_VAL                                                 'D'
         29        INIT_FCALL                                               'strtotime'
         30        FETCH_OBJ_R                                      ~18     'date'
         31        SEND_VAL                                                 ~18
         32        DO_ICALL                                         $19     
         33        SEND_VAR                                                 $19
         34        DO_ICALL                                         $20     
         35        IS_EQUAL                                         ~21     $20, ~17
         36      > JMPZ_EX                                          ~21     ~21, ->40
         37    >   FETCH_OBJ_R                                      ~22     !3, 'isPayrollDay'
         38        IS_EQUAL                                         ~23     ~22, 'N'
         39        BOOL                                             ~21     ~23
         40    > > JMPZ                                                     ~21, ->45
   42    41    >   ASSIGN                                                   !2, <true>
   44    42        INIT_METHOD_CALL                                         'loseOneDay'
         43        DO_FCALL                                      0          
   41    44      > JMP                                                      ->47
   46    45    > > JMPZ                                                     !2, ->47
   47    46    > > JMP                                                      ->48
   40    47    > > JMP                                                      ->25
         48    >   FE_FREE                                                  $16
   51    49      > JMPNZ_EX                                         ~26     !0, ->51
         50    >   BOOL                                             ~26     !2
         51    > > JMPZ                                                     ~26, ->54
   53    52    >   INIT_METHOD_CALL                                         'getPayDate'
         53        DO_FCALL                                      0          
   55    54    >   FETCH_OBJ_R                                      ~28     'date'
         55      > RETURN                                                   ~28
   56    56*     > RETURN                                                   null

End of function getpaydate

Function loseoneday:
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/amkvS
function name:  loseOneDay
number of ops:  13
compiled vars:  none
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   59     0  E >   INIT_FCALL                                               'date'
          1        SEND_VAL                                                 'Y-m-d'
          2        INIT_FCALL                                               'strtotime'
          3        FETCH_OBJ_R                                      ~1      'date'
          4        CONCAT                                           ~2      ~1, '+-1+day'
          5        SEND_VAL                                                 ~2
          6        DO_ICALL                                         $3      
          7        SEND_VAR                                                 $3
          8        DO_ICALL                                         $4      
          9        ASSIGN_OBJ                                       ~0      'date'
         10        OP_DATA                                                  $4
         11      > RETURN                                                   ~0
   60    12*     > RETURN                                                   null

End of function loseoneday

End of class PayDay.

Generated using Vulcan Logic Dumper, using php 8.0.0


preferences:
130.41 ms | 1025 KiB | 16 Q