3v4l.org

run code in 300+ PHP versions simultaneously
<?php class T{ public $value; public $ref; function equals($other, $origin = null){ if($this->value !== $other->value) return false; if($this->ref === ($origin ?? $this)) return true; return $this->ref->equals($other->ref, $origin ?? $this); } } $a1 = new T; $a1->value = 10; $a2 = new T; $a2->value = 20; $a3 = new T; $a3->value = 30; $a1->ref = $a2; $a2->ref = $a3; $a3->ref = $a1; $b1 = new T; $b1->value = 10; $b2 = new T; $b2->value = 20; $b3 = new T; $b3->value = 30; $b1->ref = $b2; $b2->ref = $b3; $b3->ref = $b1; var_dump($a1->equals($b1)); $b3->value +=10; var_dump($a1->equals($b1));
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/YOb9S
function name:  (null)
number of ops:  57
compiled vars:  !0 = $a1, !1 = $a2, !2 = $a3, !3 = $b1, !4 = $b2, !5 = $b3
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   15     0  E >   NEW                                              $6      'T'
          1        DO_FCALL                                      0          
          2        ASSIGN                                                   !0, $6
          3        ASSIGN_OBJ                                               !0, 'value'
          4        OP_DATA                                                  10
   16     5        NEW                                              $10     'T'
          6        DO_FCALL                                      0          
          7        ASSIGN                                                   !1, $10
          8        ASSIGN_OBJ                                               !1, 'value'
          9        OP_DATA                                                  20
   17    10        NEW                                              $14     'T'
         11        DO_FCALL                                      0          
         12        ASSIGN                                                   !2, $14
         13        ASSIGN_OBJ                                               !2, 'value'
         14        OP_DATA                                                  30
   18    15        ASSIGN_OBJ                                               !0, 'ref'
         16        OP_DATA                                                  !1
   19    17        ASSIGN_OBJ                                               !1, 'ref'
         18        OP_DATA                                                  !2
   20    19        ASSIGN_OBJ                                               !2, 'ref'
         20        OP_DATA                                                  !0
   22    21        NEW                                              $21     'T'
         22        DO_FCALL                                      0          
         23        ASSIGN                                                   !3, $21
         24        ASSIGN_OBJ                                               !3, 'value'
         25        OP_DATA                                                  10
   23    26        NEW                                              $25     'T'
         27        DO_FCALL                                      0          
         28        ASSIGN                                                   !4, $25
         29        ASSIGN_OBJ                                               !4, 'value'
         30        OP_DATA                                                  20
   24    31        NEW                                              $29     'T'
         32        DO_FCALL                                      0          
         33        ASSIGN                                                   !5, $29
         34        ASSIGN_OBJ                                               !5, 'value'
         35        OP_DATA                                                  30
   25    36        ASSIGN_OBJ                                               !3, 'ref'
         37        OP_DATA                                                  !4
   26    38        ASSIGN_OBJ                                               !4, 'ref'
         39        OP_DATA                                                  !5
   27    40        ASSIGN_OBJ                                               !5, 'ref'
         41        OP_DATA                                                  !3
   29    42        INIT_FCALL                                               'var_dump'
         43        INIT_METHOD_CALL                                         !0, 'equals'
         44        SEND_VAR_EX                                              !3
         45        DO_FCALL                                      0  $36     
         46        SEND_VAR                                                 $36
         47        DO_ICALL                                                 
   30    48        ASSIGN_OBJ_OP                                 1          !5, 'value'
         49        OP_DATA                                                  10
   31    50        INIT_FCALL                                               'var_dump'
         51        INIT_METHOD_CALL                                         !0, 'equals'
         52        SEND_VAR_EX                                              !3
         53        DO_FCALL                                      0  $39     
         54        SEND_VAR                                                 $39
         55        DO_ICALL                                                 
         56      > RETURN                                                   1

Class T:
Function equals:
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 43) Position 1 = 6, Position 2 = 7
Branch analysis from position: 6
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 7
2 jumps found. (Code = 43) Position 1 = 13, Position 2 = 14
Branch analysis from position: 13
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 14
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/YOb9S
function name:  equals
number of ops:  26
compiled vars:  !0 = $other, !1 = $origin
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
    6     0  E >   RECV                                             !0      
          1        RECV_INIT                                        !1      null
    7     2        FETCH_OBJ_R                                      ~2      'value'
          3        FETCH_OBJ_R                                      ~3      !0, 'value'
          4        IS_NOT_IDENTICAL                                         ~2, ~3
          5      > JMPZ                                                     ~4, ->7
    8     6    > > RETURN                                                   <false>
    9     7    >   FETCH_OBJ_R                                      ~5      'ref'
          8        COALESCE                                         ~6      !1
          9        FETCH_THIS                                       ~7      
         10        QM_ASSIGN                                        ~6      ~7
         11        IS_IDENTICAL                                             ~5, ~6
         12      > JMPZ                                                     ~8, ->14
   10    13    > > RETURN                                                   <true>
   11    14    >   FETCH_OBJ_R                                      ~9      'ref'
         15        INIT_METHOD_CALL                                         ~9, 'equals'
         16        CHECK_FUNC_ARG                                           
         17        FETCH_OBJ_FUNC_ARG                               $10     !0, 'ref'
         18        SEND_FUNC_ARG                                            $10
         19        COALESCE                                         ~11     !1
         20        FETCH_THIS                                       ~12     
         21        QM_ASSIGN                                        ~11     ~12
         22        SEND_VAL_EX                                              ~11
         23        DO_FCALL                                      0  $13     
         24      > RETURN                                                   $13
   12    25*     > RETURN                                                   null

End of function equals

End of class T.

Generated using Vulcan Logic Dumper, using php 8.0.0


preferences:
182.18 ms | 1405 KiB | 15 Q