3v4l.org

run code in 500+ PHP versions simultaneously
<?php class Tuvi { private $day; private $month; private $year; const CAN = ["Giáp", "Ất", "Bính", "Đinh", "Mậu", "Kỷ", "Canh", "Tân", "Nhâm", "Qúy"]; const CHI = ["Tí", "Sửu", "Dần", "Mão", "Thìn", "Tỵ", "Ngọ", "Mùi", "Thân", "Dậu", "Tuất", "Hợi"]; public function __construct(int $day, int $month, int $year) { $this->day = $day; $this->month = $month; $this->year = $year; } public function toLunarDate() : string { $can = 3; $chi = 9; $comparingDate = new self(1, 3, 1996); $diffDays = $this->diffDays($comparingDate); if ($this->isLessThan($comparingDate)) { $can = ($can - $diffDays % 10 + 10) % 10; $chi = ($chi - $diffDays % 12 + 12) % 12; } else if ($this->isGreaterThan($comparingDate)) { $can = ($can + $diffDays % 10) % 10; $chi = ($chi + $diffDays % 12) % 12; } return sprintf("%s %s", static::CAN[$can], static::CHI[$chi]); } public function diffDays(Tuvi $t) : int { return $this->toDateTime()->diff($t->toDateTime())->days; } public function isLessThan(Tuvi $t) : bool { return $this->toDateTime() < $t->toDateTime(); } public function equals(Tuvi $t) : bool { return $this->toDateTime() == $t->toDateTime(); } public function isGreaterThan(TuVi $t) : bool { return $this->toDateTime() > $t->toDateTime(); } public function toDateTime() : DateTime { return new DateTime("{$this->year}-{$this->month}-{$this->day}"); } } $x = new Tuvi(31, 1, 1988); $y = new Tuvi(31,12,1989); var_dump( $x->diffDays($y), $x->isLessThan($y), $y->isLessThan($x), $x->toLunarDate(), (new Tuvi(15,12,1990))->toLunarDate(), (new Tuvi(25,3,2000))->toLunarDate(), (new Tuvi(27,11,1995))->toLunarDate() );
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/WRatI
function name:  (null)
number of ops:  54
compiled vars:  !0 = $x, !1 = $y
line      #* E I O op                               fetch          ext  return  operands
-----------------------------------------------------------------------------------------
   65     0  E >   NEW                                                  $2      'Tuvi'
          1        SEND_VAL_EX                                                  31
          2        SEND_VAL_EX                                                  1
          3        SEND_VAL_EX                                                  1988
          4        DO_FCALL                                          0          
          5        ASSIGN                                                       !0, $2
   66     6        NEW                                                  $5      'Tuvi'
          7        SEND_VAL_EX                                                  31
          8        SEND_VAL_EX                                                  12
          9        SEND_VAL_EX                                                  1989
         10        DO_FCALL                                          0          
         11        ASSIGN                                                       !1, $5
   68    12        INIT_FCALL                                                   'var_dump'
   69    13        INIT_METHOD_CALL                                             !0, 'diffDays'
         14        SEND_VAR_EX                                                  !1
         15        DO_FCALL                                          0  $8      
         16        SEND_VAR                                                     $8
   70    17        INIT_METHOD_CALL                                             !0, 'isLessThan'
         18        SEND_VAR_EX                                                  !1
         19        DO_FCALL                                          0  $9      
         20        SEND_VAR                                                     $9
   71    21        INIT_METHOD_CALL                                             !1, 'isLessThan'
         22        SEND_VAR_EX                                                  !0
         23        DO_FCALL                                          0  $10     
         24        SEND_VAR                                                     $10
   72    25        INIT_METHOD_CALL                                             !0, 'toLunarDate'
         26        DO_FCALL                                          0  $11     
         27        SEND_VAR                                                     $11
   73    28        NEW                                                  $12     'Tuvi'
         29        SEND_VAL_EX                                                  15
         30        SEND_VAL_EX                                                  12
         31        SEND_VAL_EX                                                  1990
         32        DO_FCALL                                          0          
         33        INIT_METHOD_CALL                                             $12, 'toLunarDate'
         34        DO_FCALL                                          0  $14     
         35        SEND_VAR                                                     $14
   74    36        NEW                                                  $15     'Tuvi'
         37        SEND_VAL_EX                                                  25
         38        SEND_VAL_EX                                                  3
         39        SEND_VAL_EX                                                  2000
         40        DO_FCALL                                          0          
         41        INIT_METHOD_CALL                                             $15, 'toLunarDate'
         42        DO_FCALL                                          0  $17     
         43        SEND_VAR                                                     $17
   75    44        NEW                                                  $18     'Tuvi'
         45        SEND_VAL_EX                                                  27
         46        SEND_VAL_EX                                                  11
         47        SEND_VAL_EX                                                  1995
         48        DO_FCALL                                          0          
         49        INIT_METHOD_CALL                                             $18, 'toLunarDate'
         50        DO_FCALL                                          0  $20     
         51        SEND_VAR                                                     $20
   68    52        DO_ICALL                                                     
   76    53      > RETURN                                                       1

Class Tuvi:
Function __construct:
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/WRatI
function name:  __construct
number of ops:  10
compiled vars:  !0 = $day, !1 = $month, !2 = $year
line      #* E I O op                               fetch          ext  return  operands
-----------------------------------------------------------------------------------------
   12     0  E >   RECV                                                 !0      
          1        RECV                                                 !1      
          2        RECV                                                 !2      
   14     3        ASSIGN_OBJ                                                   'day'
          4        OP_DATA                                                      !0
   15     5        ASSIGN_OBJ                                                   'month'
          6        OP_DATA                                                      !1
   16     7        ASSIGN_OBJ                                                   'year'
          8        OP_DATA                                                      !2
   17     9      > RETURN                                                       null

End of function __construct

Function tolunardate:
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 43) Position 1 = 16, Position 2 = 27
Branch analysis from position: 16
1 jumps found. (Code = 42) Position 1 = 39
Branch analysis from position: 39
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 27
2 jumps found. (Code = 43) Position 1 = 31, Position 2 = 39
Branch analysis from position: 31
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 39
filename:       /in/WRatI
function name:  toLunarDate
number of ops:  50
compiled vars:  !0 = $can, !1 = $chi, !2 = $comparingDate, !3 = $diffDays
line      #* E I O op                               fetch          ext  return  operands
-----------------------------------------------------------------------------------------
   21     0  E >   ASSIGN                                                       !0, 3
   22     1        ASSIGN                                                       !1, 9
   24     2        NEW                              self                $6      
          3        SEND_VAL_EX                                                  1
          4        SEND_VAL_EX                                                  3
          5        SEND_VAL_EX                                                  1996
          6        DO_FCALL                                          0          
          7        ASSIGN                                                       !2, $6
   25     8        INIT_METHOD_CALL                                             'diffDays'
          9        SEND_VAR_EX                                                  !2
         10        DO_FCALL                                          0  $9      
         11        ASSIGN                                                       !3, $9
   27    12        INIT_METHOD_CALL                                             'isLessThan'
         13        SEND_VAR_EX                                                  !2
         14        DO_FCALL                                          0  $11     
         15      > JMPZ                                                         $11, ->27
   28    16    >   MOD                                                  ~12     !3, 10
         17        SUB                                                  ~13     !0, ~12
         18        ADD                                                  ~14     ~13, 10
         19        MOD                                                  ~15     ~14, 10
         20        ASSIGN                                                       !0, ~15
   29    21        MOD                                                  ~17     !3, 12
         22        SUB                                                  ~18     !1, ~17
         23        ADD                                                  ~19     ~18, 12
         24        MOD                                                  ~20     ~19, 12
         25        ASSIGN                                                       !1, ~20
   27    26      > JMP                                                          ->39
   30    27    >   INIT_METHOD_CALL                                             'isGreaterThan'
         28        SEND_VAR_EX                                                  !2
         29        DO_FCALL                                          0  $22     
         30      > JMPZ                                                         $22, ->39
   31    31    >   MOD                                                  ~23     !3, 10
         32        ADD                                                  ~24     !0, ~23
         33        MOD                                                  ~25     ~24, 10
         34        ASSIGN                                                       !0, ~25
   32    35        MOD                                                  ~27     !3, 12
         36        ADD                                                  ~28     !1, ~27
         37        MOD                                                  ~29     ~28, 12
         38        ASSIGN                                                       !1, ~29
   35    39    >   FETCH_CLASS_CONSTANT                                 ~31     'CAN'
         40        FETCH_DIM_R                                          ~32     ~31, !0
         41        FETCH_CLASS_CONSTANT                                 ~33     'CHI'
         42        FETCH_DIM_R                                          ~34     ~33, !1
         43        ROPE_INIT                                         3  ~36     ~32
         44        ROPE_ADD                                          1  ~36     ~36, '+'
         45        ROPE_END                                          2  ~35     ~36, ~34
         46        VERIFY_RETURN_TYPE                                           ~35
         47      > RETURN                                                       ~35
   36    48*       VERIFY_RETURN_TYPE                                           
         49*     > RETURN                                                       null

End of function tolunardate

Function diffdays:
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/WRatI
function name:  diffDays
number of ops:  13
compiled vars:  !0 = $t
line      #* E I O op                               fetch          ext  return  operands
-----------------------------------------------------------------------------------------
   38     0  E >   RECV                                                 !0      
   40     1        INIT_METHOD_CALL                                             'toDateTime'
          2        DO_FCALL                                          0  $1      
          3        INIT_METHOD_CALL                                             $1, 'diff'
          4        INIT_METHOD_CALL                                             !0, 'toDateTime'
          5        DO_FCALL                                          0  $2      
          6        SEND_VAR_NO_REF_EX                                           $2
          7        DO_FCALL                                          0  $3      
          8        FETCH_OBJ_R                                          ~4      $3, 'days'
          9        VERIFY_RETURN_TYPE                                           ~4
         10      > RETURN                                                       ~4
   41    11*       VERIFY_RETURN_TYPE                                           
         12*     > RETURN                                                       null

End of function diffdays

Function islessthan:
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/WRatI
function name:  isLessThan
number of ops:  10
compiled vars:  !0 = $t
line      #* E I O op                               fetch          ext  return  operands
-----------------------------------------------------------------------------------------
   43     0  E >   RECV                                                 !0      
   45     1        INIT_METHOD_CALL                                             'toDateTime'
          2        DO_FCALL                                          0  $1      
          3        INIT_METHOD_CALL                                             !0, 'toDateTime'
          4        DO_FCALL                                          0  $2      
          5        IS_SMALLER                                           ~3      $1, $2
          6        VERIFY_RETURN_TYPE                                           ~3
          7      > RETURN                                                       ~3
   46     8*       VERIFY_RETURN_TYPE                                           
          9*     > RETURN                                                       null

End of function islessthan

Function equals:
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/WRatI
function name:  equals
number of ops:  10
compiled vars:  !0 = $t
line      #* E I O op                               fetch          ext  return  operands
-----------------------------------------------------------------------------------------
   48     0  E >   RECV                                                 !0      
   50     1        INIT_METHOD_CALL                                             'toDateTime'
          2        DO_FCALL                                          0  $1      
          3        INIT_METHOD_CALL                                             !0, 'toDateTime'
          4        DO_FCALL                                          0  $2      
          5        IS_EQUAL                                             ~3      $1, $2
          6        VERIFY_RETURN_TYPE                                           ~3
          7      > RETURN                                                       ~3
   51     8*       VERIFY_RETURN_TYPE                                           
          9*     > RETURN                                                       null

End of function equals

Function isgreaterthan:
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/WRatI
function name:  isGreaterThan
number of ops:  10
compiled vars:  !0 = $t
line      #* E I O op                               fetch          ext  return  operands
-----------------------------------------------------------------------------------------
   53     0  E >   RECV                                                 !0      
   55     1        INIT_METHOD_CALL                                             'toDateTime'
          2        DO_FCALL                                          0  $1      
          3        INIT_METHOD_CALL                                             !0, 'toDateTime'
          4        DO_FCALL                                          0  $2      
          5        IS_SMALLER                                           ~3      $2, $1
          6        VERIFY_RETURN_TYPE                                           ~3
          7      > RETURN                                                       ~3
   56     8*       VERIFY_RETURN_TYPE                                           
          9*     > RETURN                                                       null

End of function isgreaterthan

Function todatetime:
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/WRatI
function name:  toDateTime
number of ops:  15
compiled vars:  none
line      #* E I O op                               fetch          ext  return  operands
-----------------------------------------------------------------------------------------
   60     0  E >   NEW                                                  $0      'DateTime'
          1        FETCH_OBJ_R                                          ~1      'year'
          2        ROPE_INIT                                         5  ~5      ~1
          3        ROPE_ADD                                          1  ~5      ~5, '-'
          4        FETCH_OBJ_R                                          ~2      'month'
          5        ROPE_ADD                                          2  ~5      ~5, ~2
          6        ROPE_ADD                                          3  ~5      ~5, '-'
          7        FETCH_OBJ_R                                          ~3      'day'
          8        ROPE_END                                          4  ~4      ~5, ~3
          9        SEND_VAL_EX                                                  ~4
         10        DO_FCALL                                          0          
         11        VERIFY_RETURN_TYPE                                           $0
         12      > RETURN                                                       $0
   61    13*       VERIFY_RETURN_TYPE                                           
         14*     > RETURN                                                       null

End of function todatetime

End of class Tuvi.

Generated using Vulcan Logic Dumper, using php 8.5.0


preferences:
165.23 ms | 2138 KiB | 16 Q