3v4l.org

run code in 300+ PHP versions simultaneously
<?php trait Trait1 {}; trait Trait2 {}; interface Interface1 {}; interface Interface2 {}; interface Interface3 {}; abstract class Abstract1 implements Interface1 { use Trait1; }; class Class1 extends Abstract1 implements Interface2 {} class Class2 extends Class1 implements Interface3 { use Trait2; } $testObject = new Class2(); echo $testObject instanceof Class2 ? '.' : 'X'; echo $testObject instanceof Class1 ? '.' : 'X'; echo $testObject instanceof Abstract1 ? '.' : 'X'; echo $testObject instanceof Interface3 ? '.' : 'X'; echo $testObject instanceof Interface2 ? '.' : 'X'; echo $testObject instanceof Interface1 ? '.' : 'X'; echo PHP_EOL; echo '----------'.PHP_EOL; $types = getAllTypes($testObject); foreach($types as $type) { echo $type.PHP_EOL; } echo '----------'.PHP_EOL; $types = getAllTypesEasy($testObject); foreach($types as $type) { echo $type.PHP_EOL; } function getAllTypes($object) { $reflection = new ReflectionObject($object); $types = $reflection->getInterfaceNames(); $types[] = get_class($object); $types = array_merge($types, $reflection->getTraitNames()); while($reflection = $reflection->getParentClass()) { $types[] = $reflection->getName(); $types = array_merge($types, $reflection->getTraitNames()); } return $types; } function getAllTypesEasy($object) { return array_merge( [get_class($object)], class_parents($object), class_implements($object), class_uses($object) ); }
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 43) Position 1 = 8, Position 2 = 10
Branch analysis from position: 8
1 jumps found. (Code = 42) Position 1 = 11
Branch analysis from position: 11
2 jumps found. (Code = 43) Position 1 = 14, Position 2 = 16
Branch analysis from position: 14
1 jumps found. (Code = 42) Position 1 = 17
Branch analysis from position: 17
2 jumps found. (Code = 43) Position 1 = 20, Position 2 = 22
Branch analysis from position: 20
1 jumps found. (Code = 42) Position 1 = 23
Branch analysis from position: 23
2 jumps found. (Code = 43) Position 1 = 26, Position 2 = 28
Branch analysis from position: 26
1 jumps found. (Code = 42) Position 1 = 29
Branch analysis from position: 29
2 jumps found. (Code = 43) Position 1 = 32, Position 2 = 34
Branch analysis from position: 32
1 jumps found. (Code = 42) Position 1 = 35
Branch analysis from position: 35
2 jumps found. (Code = 43) Position 1 = 38, Position 2 = 40
Branch analysis from position: 38
1 jumps found. (Code = 42) Position 1 = 41
Branch analysis from position: 41
2 jumps found. (Code = 77) Position 1 = 49, Position 2 = 53
Branch analysis from position: 49
2 jumps found. (Code = 78) Position 1 = 50, Position 2 = 53
Branch analysis from position: 50
1 jumps found. (Code = 42) Position 1 = 49
Branch analysis from position: 49
Branch analysis from position: 53
2 jumps found. (Code = 77) Position 1 = 60, Position 2 = 64
Branch analysis from position: 60
2 jumps found. (Code = 78) Position 1 = 61, Position 2 = 64
Branch analysis from position: 61
1 jumps found. (Code = 42) Position 1 = 60
Branch analysis from position: 60
Branch analysis from position: 64
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 64
Branch analysis from position: 53
Branch analysis from position: 40
2 jumps found. (Code = 77) Position 1 = 49, Position 2 = 53
Branch analysis from position: 49
Branch analysis from position: 53
Branch analysis from position: 34
2 jumps found. (Code = 43) Position 1 = 38, Position 2 = 40
Branch analysis from position: 38
Branch analysis from position: 40
Branch analysis from position: 28
2 jumps found. (Code = 43) Position 1 = 32, Position 2 = 34
Branch analysis from position: 32
Branch analysis from position: 34
Branch analysis from position: 22
2 jumps found. (Code = 43) Position 1 = 26, Position 2 = 28
Branch analysis from position: 26
Branch analysis from position: 28
Branch analysis from position: 16
2 jumps found. (Code = 43) Position 1 = 20, Position 2 = 22
Branch analysis from position: 20
Branch analysis from position: 22
Branch analysis from position: 10
2 jumps found. (Code = 43) Position 1 = 14, Position 2 = 16
Branch analysis from position: 14
Branch analysis from position: 16
filename:       /in/vWOmn
function name:  (null)
number of ops:  66
compiled vars:  !0 = $testObject, !1 = $types, !2 = $type
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   10     0  E >   DECLARE_CLASS                                            'abstract1'
   14     1        DECLARE_CLASS                                            'class1', 'abstract1'
   16     2        DECLARE_CLASS                                            'class2', 'class1'
   20     3        NEW                                              $3      'Class2'
          4        DO_FCALL                                      0          
          5        ASSIGN                                                   !0, $3
   23     6        INSTANCEOF                                               !0, 'Class2'
          7      > JMPZ                                                     ~6, ->10
          8    >   QM_ASSIGN                                        ~7      '.'
          9      > JMP                                                      ->11
         10    >   QM_ASSIGN                                        ~7      'X'
         11    >   ECHO                                                     ~7
   24    12        INSTANCEOF                                               !0, 'Class1'
         13      > JMPZ                                                     ~8, ->16
         14    >   QM_ASSIGN                                        ~9      '.'
         15      > JMP                                                      ->17
         16    >   QM_ASSIGN                                        ~9      'X'
         17    >   ECHO                                                     ~9
   25    18        INSTANCEOF                                               !0, 'Abstract1'
         19      > JMPZ                                                     ~10, ->22
         20    >   QM_ASSIGN                                        ~11     '.'
         21      > JMP                                                      ->23
         22    >   QM_ASSIGN                                        ~11     'X'
         23    >   ECHO                                                     ~11
   26    24        INSTANCEOF                                               !0, 'Interface3'
         25      > JMPZ                                                     ~12, ->28
         26    >   QM_ASSIGN                                        ~13     '.'
         27      > JMP                                                      ->29
         28    >   QM_ASSIGN                                        ~13     'X'
         29    >   ECHO                                                     ~13
   27    30        INSTANCEOF                                               !0, 'Interface2'
         31      > JMPZ                                                     ~14, ->34
         32    >   QM_ASSIGN                                        ~15     '.'
         33      > JMP                                                      ->35
         34    >   QM_ASSIGN                                        ~15     'X'
         35    >   ECHO                                                     ~15
   28    36        INSTANCEOF                                               !0, 'Interface1'
         37      > JMPZ                                                     ~16, ->40
         38    >   QM_ASSIGN                                        ~17     '.'
         39      > JMP                                                      ->41
         40    >   QM_ASSIGN                                        ~17     'X'
         41    >   ECHO                                                     ~17
   29    42        ECHO                                                     '%0A'
   31    43        ECHO                                                     '----------%0A'
   33    44        INIT_FCALL_BY_NAME                                       'getAllTypes'
         45        SEND_VAR_EX                                              !0
         46        DO_FCALL                                      0  $18     
         47        ASSIGN                                                   !1, $18
   35    48      > FE_RESET_R                                       $20     !1, ->53
         49    > > FE_FETCH_R                                               $20, !2, ->53
   36    50    >   CONCAT                                           ~21     !2, '%0A'
         51        ECHO                                                     ~21
   35    52      > JMP                                                      ->49
         53    >   FE_FREE                                                  $20
   39    54        ECHO                                                     '----------%0A'
   41    55        INIT_FCALL_BY_NAME                                       'getAllTypesEasy'
         56        SEND_VAR_EX                                              !0
         57        DO_FCALL                                      0  $22     
         58        ASSIGN                                                   !1, $22
   43    59      > FE_RESET_R                                       $24     !1, ->64
         60    > > FE_FETCH_R                                               $24, !2, ->64
   44    61    >   CONCAT                                           ~25     !2, '%0A'
         62        ECHO                                                     ~25
   43    63      > JMP                                                      ->60
         64    >   FE_FREE                                                  $24
   66    65      > RETURN                                                   1

Function getalltypes:
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 42) Position 1 = 30
Branch analysis from position: 30
2 jumps found. (Code = 44) Position 1 = 34, Position 2 = 19
Branch analysis from position: 34
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 19
2 jumps found. (Code = 44) Position 1 = 34, Position 2 = 19
Branch analysis from position: 34
Branch analysis from position: 19
filename:       /in/vWOmn
function name:  getAllTypes
number of ops:  36
compiled vars:  !0 = $object, !1 = $reflection, !2 = $types
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   47     0  E >   RECV                                             !0      
   48     1        NEW                                              $3      'ReflectionObject'
          2        SEND_VAR_EX                                              !0
          3        DO_FCALL                                      0          
          4        ASSIGN                                                   !1, $3
   49     5        INIT_METHOD_CALL                                         !1, 'getInterfaceNames'
          6        DO_FCALL                                      0  $6      
          7        ASSIGN                                                   !2, $6
   50     8        GET_CLASS                                        ~9      !0
          9        ASSIGN_DIM                                               !2
         10        OP_DATA                                                  ~9
   51    11        INIT_FCALL                                               'array_merge'
         12        SEND_VAR                                                 !2
         13        INIT_METHOD_CALL                                         !1, 'getTraitNames'
         14        DO_FCALL                                      0  $10     
         15        SEND_VAR                                                 $10
         16        DO_ICALL                                         $11     
         17        ASSIGN                                                   !2, $11
   52    18      > JMP                                                      ->30
   53    19    >   INIT_METHOD_CALL                                         !1, 'getName'
         20        DO_FCALL                                      0  $14     
         21        ASSIGN_DIM                                               !2
         22        OP_DATA                                                  $14
   54    23        INIT_FCALL                                               'array_merge'
         24        SEND_VAR                                                 !2
         25        INIT_METHOD_CALL                                         !1, 'getTraitNames'
         26        DO_FCALL                                      0  $15     
         27        SEND_VAR                                                 $15
         28        DO_ICALL                                         $16     
         29        ASSIGN                                                   !2, $16
   52    30    >   INIT_METHOD_CALL                                         !1, 'getParentClass'
         31        DO_FCALL                                      0  $18     
         32        ASSIGN                                           ~19     !1, $18
         33      > JMPNZ                                                    ~19, ->19
   56    34    > > RETURN                                                   !2
   57    35*     > RETURN                                                   null

End of function getalltypes

Function getalltypeseasy:
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/vWOmn
function name:  getAllTypesEasy
number of ops:  20
compiled vars:  !0 = $object
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   59     0  E >   RECV                                             !0      
   60     1        INIT_FCALL                                               'array_merge'
   61     2        GET_CLASS                                        ~1      !0
          3        INIT_ARRAY                                       ~2      ~1
          4        SEND_VAL                                                 ~2
   62     5        INIT_FCALL                                               'class_parents'
          6        SEND_VAR                                                 !0
          7        DO_ICALL                                         $3      
          8        SEND_VAR                                                 $3
   63     9        INIT_FCALL                                               'class_implements'
         10        SEND_VAR                                                 !0
         11        DO_ICALL                                         $4      
         12        SEND_VAR                                                 $4
   64    13        INIT_FCALL                                               'class_uses'
         14        SEND_VAR                                                 !0
         15        DO_ICALL                                         $5      
         16        SEND_VAR                                                 $5
   60    17        DO_ICALL                                         $6      
   64    18      > RETURN                                                   $6
   66    19*     > RETURN                                                   null

End of function getalltypeseasy

Class Trait1: [no user functions]
Class Trait2: [no user functions]
Class Interface1: [no user functions]
Class Interface2: [no user functions]
Class Interface3: [no user functions]
Class Abstract1: [no user functions]
Class Class1: [no user functions]
Class Class2: [no user functions]

Generated using Vulcan Logic Dumper, using php 8.0.0


preferences:
307.93 ms | 1027 KiB | 17 Q