3v4l.org

run code in 300+ PHP versions simultaneously
<?php interface A {} class B implements A {} class C extends B {} class D extends B implements A {} $bRef = new ReflectionClass('B'); $cRef = new ReflectionClass('C'); $dRef = new ReflectionClass('D'); echo 'B implements A: '; echo 'C implements A: '.$cRef->implementsInterface('A') ? 'yes' : 'no'; echo 'D implements A: '.$dRef->implementsInterface('A') ? 'yes' : 'no'; echo 'B subclass of A: '.$bRef->isSubclassOf('A') ? 'yes' : 'no'; echo 'C subclass of A: '.$cRef->isSubclassOf('A') ? 'yes' : 'no'; echo 'D subclass of A: '.$dRef->isSubclassOf('A') ? 'yes' : 'no';
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 43) Position 1 = 21, Position 2 = 23
Branch analysis from position: 21
1 jumps found. (Code = 42) Position 1 = 24
Branch analysis from position: 24
2 jumps found. (Code = 43) Position 1 = 30, Position 2 = 32
Branch analysis from position: 30
1 jumps found. (Code = 42) Position 1 = 33
Branch analysis from position: 33
2 jumps found. (Code = 43) Position 1 = 39, Position 2 = 41
Branch analysis from position: 39
1 jumps found. (Code = 42) Position 1 = 42
Branch analysis from position: 42
2 jumps found. (Code = 43) Position 1 = 48, Position 2 = 50
Branch analysis from position: 48
1 jumps found. (Code = 42) Position 1 = 51
Branch analysis from position: 51
2 jumps found. (Code = 43) Position 1 = 57, Position 2 = 59
Branch analysis from position: 57
1 jumps found. (Code = 42) Position 1 = 60
Branch analysis from position: 60
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 59
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 50
2 jumps found. (Code = 43) Position 1 = 57, Position 2 = 59
Branch analysis from position: 57
Branch analysis from position: 59
Branch analysis from position: 41
2 jumps found. (Code = 43) Position 1 = 48, Position 2 = 50
Branch analysis from position: 48
Branch analysis from position: 50
Branch analysis from position: 32
2 jumps found. (Code = 43) Position 1 = 39, Position 2 = 41
Branch analysis from position: 39
Branch analysis from position: 41
Branch analysis from position: 23
2 jumps found. (Code = 43) Position 1 = 30, Position 2 = 32
Branch analysis from position: 30
Branch analysis from position: 32
filename:       /in/66fhv
function name:  (null)
number of ops:  62
compiled vars:  !0 = $bRef, !1 = $cRef, !2 = $dRef
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
    5     0  E >   DECLARE_CLASS                                            'b'
    6     1        DECLARE_CLASS                                            'c', 'b'
    7     2        DECLARE_CLASS                                            'd', 'b'
    9     3        NEW                                              $3      'ReflectionClass'
          4        SEND_VAL_EX                                              'B'
          5        DO_FCALL                                      0          
          6        ASSIGN                                                   !0, $3
   10     7        NEW                                              $6      'ReflectionClass'
          8        SEND_VAL_EX                                              'C'
          9        DO_FCALL                                      0          
         10        ASSIGN                                                   !1, $6
   11    11        NEW                                              $9      'ReflectionClass'
         12        SEND_VAL_EX                                              'D'
         13        DO_FCALL                                      0          
         14        ASSIGN                                                   !2, $9
   13    15        ECHO                                                     'B+implements+A%3A+'
   14    16        INIT_METHOD_CALL                                         !1, 'implementsInterface'
         17        SEND_VAL_EX                                              'A'
         18        DO_FCALL                                      0  $12     
         19        CONCAT                                           ~13     'C+implements+A%3A+', $12
         20      > JMPZ                                                     ~13, ->23
         21    >   QM_ASSIGN                                        ~14     'yes'
         22      > JMP                                                      ->24
         23    >   QM_ASSIGN                                        ~14     'no'
         24    >   ECHO                                                     ~14
   15    25        INIT_METHOD_CALL                                         !2, 'implementsInterface'
         26        SEND_VAL_EX                                              'A'
         27        DO_FCALL                                      0  $15     
         28        CONCAT                                           ~16     'D+implements+A%3A+', $15
         29      > JMPZ                                                     ~16, ->32
         30    >   QM_ASSIGN                                        ~17     'yes'
         31      > JMP                                                      ->33
         32    >   QM_ASSIGN                                        ~17     'no'
         33    >   ECHO                                                     ~17
   17    34        INIT_METHOD_CALL                                         !0, 'isSubclassOf'
         35        SEND_VAL_EX                                              'A'
         36        DO_FCALL                                      0  $18     
         37        CONCAT                                           ~19     'B+subclass+of+A%3A+', $18
         38      > JMPZ                                                     ~19, ->41
         39    >   QM_ASSIGN                                        ~20     'yes'
         40      > JMP                                                      ->42
         41    >   QM_ASSIGN                                        ~20     'no'
         42    >   ECHO                                                     ~20
   18    43        INIT_METHOD_CALL                                         !1, 'isSubclassOf'
         44        SEND_VAL_EX                                              'A'
         45        DO_FCALL                                      0  $21     
         46        CONCAT                                           ~22     'C+subclass+of+A%3A+', $21
         47      > JMPZ                                                     ~22, ->50
         48    >   QM_ASSIGN                                        ~23     'yes'
         49      > JMP                                                      ->51
         50    >   QM_ASSIGN                                        ~23     'no'
         51    >   ECHO                                                     ~23
   19    52        INIT_METHOD_CALL                                         !2, 'isSubclassOf'
         53        SEND_VAL_EX                                              'A'
         54        DO_FCALL                                      0  $24     
         55        CONCAT                                           ~25     'D+subclass+of+A%3A+', $24
         56      > JMPZ                                                     ~25, ->59
         57    >   QM_ASSIGN                                        ~26     'yes'
         58      > JMP                                                      ->60
         59    >   QM_ASSIGN                                        ~26     'no'
         60    >   ECHO                                                     ~26
         61      > RETURN                                                   1

Class A: [no user functions]
Class B: [no user functions]
Class C: [no user functions]
Class D: [no user functions]

Generated using Vulcan Logic Dumper, using php 8.0.0


preferences:
148.31 ms | 1390 KiB | 13 Q