3v4l.org

run code in 300+ PHP versions simultaneously
<?php function call_user_func_fixed(){$args=func_get_args();$callable=array_shift($args);return call_user_func_array_fixed($callable,$args);}function call_user_func_array_fixed($callable,$args){$isStaticMethod=false;$expr='/^([a-z_\x7f-\xff][\w\x7f-\xff]*)::([a-z_\x7f-\xff][\w\x7f-\xff]*)$/i';if(is_string($callable)&&preg_match($expr,$callable,$matches)){$func=array($matches[1],$matches[2]);}else if(is_array($callable)&&count($callable)===2&&isset($callable[0],$callable[1])&&(is_string($callable[0])||is_object($callable[0]))&&is_string($callable[1])){$func=$callable;}if(!isset($func)){return call_user_func_array($func,$args);}$backtrace=debug_backtrace();if($backtrace[1]['function']==='call_user_func_fixed'){$called='call_user_func_fixed';$contextKey=2;}else {$called='call_user_func_array_fixed';$contextKey=1;}try{switch(true){case $func[0]==='self':case $func[0]==='static':if(!isset($backtrace[$contextKey]['object'])){ throw new Exception('Use of self:: in an invalid context');}$contextClass=new ReflectionClass($backtrace[$contextKey][$func[0]==='self'?'class':'object']);$contextClassName=$contextClass->getName();$method=$contextClass->getMethod($func[1]);$ownerClassName=$method->getDeclaringClass()->getName();if(!$method->isStatic()){ throw new Exception('Attempting to call instance method in a static context');}$invokeContext=null;if($method->isPrivate()){if($ownerClassName!==$contextClassName||!method_exists($method,'setAccessible')){ throw new Exception('Attempting to call private method in an invalid context');}$method->setAccessible(true);}else if($method->isProtected()){if(!method_exists($method,'setAccessible')){ throw new Exception('Attempting to call protected method in an invalid context');}while($contextClass->getName()!==$ownerClassName){$contextClass=$contextClass->getParentClass();}if($contextClass->getName()!==$ownerClassName){ throw new Exception('Attempting to call protected method in an invalid context');}$method->setAccessible(true);}break;case is_object($func[0]):$contextClass=new ReflectionClass($func[0]);$contextClassName=$contextClass->getName();$method=$contextClass->getMethod($func[1]);$ownerClassName=$method->getDeclaringClass()->getName();if($method->isStatic()){$invokeContext=null;if($method->isPrivate()){if($ownerClassName!==$contextClassName||!method_exists($method,'setAccessible')){ throw new Exception('Attempting to call private method in an invalid context');}$method->setAccessible(true);}else if($method->isProtected()){if(!method_exists($method,'setAccessible')){ throw new Exception('Attempting to call protected method in an invalid context');}while($contextClass->getName()!==$ownerClassName){$contextClass=$contextClass->getParentClass();}if($contextClass->getName()!==$ownerClassName){ throw new Exception('Attempting to call protected method in an invalid context');}$method->setAccessible(true);}}else {$invokeContext=$func[0];}break;default:$contextClass=new ReflectionClass($backtrace[$contextKey]['object']);$method=new ReflectionMethod($func[1],$func[0]);$ownerClassName=$method->getDeclaringClass()->getName();if(!$method->isStatic()){ throw new Exception('Attempting to call instance method in a static context');}$invokeContext=null;if($method->isPrivate()){if(empty($backtrace[$contextKey]['object'])||$func[0]!==$contextClass->getName()||!method_exists($method,'setAccessible')){ throw new Exception('Attempting to call private method in an invalid context');}$method->setAccessible(true);}else if($method->isProtected()){$contextClass=new ReflectionClass($backtrace[$contextKey]['object']);if(empty($backtrace[$contextKey]['object'])||!method_exists($method,'setAccessible')){ throw new Exception('Attempting to call protected method outside a class context');}while($contextClass->getName()!==$ownerClassName){$contextClass=$contextClass->getParentClass();}if($contextClass->getName()!==$ownerClassName){ throw new Exception('Attempting to call protected method in an invalid context');}$method->setAccessible(true);}break;}return $method->invokeArgs($invokeContext,$args);}catch(Exception$e){trigger_error($called.'() expects parameter 1 to be a valid callback: '.$e->getMessage(),E_USER_ERROR);return null;}}class Car{ public function run(){return call_user_func_fixed(array('Toyota','getName'));} private static function getName(){return 'Car';}}class Toyota extends Car{ public static function getName(){return 'Toyota';}}$car=new Car();echo $car->run();$toyota=new Toyota();echo $toyota->run();
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/P0i1r
function name:  (null)
number of ops:  13
compiled vars:  !0 = $car, !1 = $toyota
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
    2     0  E >   NEW                                              $2      'Car'
          1        DO_FCALL                                      0          
          2        ASSIGN                                                   !0, $2
          3        INIT_METHOD_CALL                                         !0, 'run'
          4        DO_FCALL                                      0  $5      
          5        ECHO                                                     $5
          6        NEW                                              $6      'Toyota'
          7        DO_FCALL                                      0          
          8        ASSIGN                                                   !1, $6
          9        INIT_METHOD_CALL                                         !1, 'run'
         10        DO_FCALL                                      0  $9      
         11        ECHO                                                     $9
         12      > RETURN                                                   1

Function call_user_func_fixed:
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/P0i1r
function name:  call_user_func_fixed
number of ops:  12
compiled vars:  !0 = $args, !1 = $callable
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
          0  E >   FUNC_GET_ARGS                                    ~2      
          1        ASSIGN                                                   !0, ~2
          2        INIT_FCALL                                               'array_shift'
          3        SEND_REF                                                 !0
          4        DO_ICALL                                         $4      
          5        ASSIGN                                                   !1, $4
          6        INIT_FCALL_BY_NAME                                       'call_user_func_array_fixed'
          7        SEND_VAR_EX                                              !1
          8        SEND_VAR_EX                                              !0
          9        DO_FCALL                                      0  $6      
         10      > RETURN                                                   $6
         11*     > RETURN                                                   null

End of function call_user_func_fixed

Function call_user_func_array_fixed:
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 46) Position 1 = 6, Position 2 = 12
Branch analysis from position: 6
2 jumps found. (Code = 43) Position 1 = 13, Position 2 = 19
Branch analysis from position: 13
1 jumps found. (Code = 42) Position 1 = 44
Branch analysis from position: 44
2 jumps found. (Code = 43) Position 1 = 47, Position 2 = 52
Branch analysis from position: 47
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 52
2 jumps found. (Code = 43) Position 1 = 59, Position 2 = 62
Branch analysis from position: 59
1 jumps found. (Code = 42) Position 1 = 64
Branch analysis from position: 64
2 jumps found. (Code = 44) Position 1 = 67, Position 2 = 74
Branch analysis from position: 67
2 jumps found. (Code = 44) Position 1 = 70, Position 2 = 74
Branch analysis from position: 70
2 jumps found. (Code = 44) Position 1 = 73, Position 2 = 171
Branch analysis from position: 73
1 jumps found. (Code = 42) Position 1 = 251
Branch analysis from position: 251
2 jumps found. (Code = 43) Position 1 = 276, Position 2 = 280
Branch analysis from position: 276
1 jumps found. (Code = 108) Position 1 = -2
Branch analysis from position: 280
2 jumps found. (Code = 43) Position 1 = 284, Position 2 = 308
Branch analysis from position: 284
2 jumps found. (Code = 47) Position 1 = 287, Position 2 = 292
Branch analysis from position: 287
2 jumps found. (Code = 47) Position 1 = 293, Position 2 = 299
Branch analysis from position: 293
2 jumps found. (Code = 43) Position 1 = 300, Position 2 = 304
Branch analysis from position: 300
1 jumps found. (Code = 108) Position 1 = -2
Branch analysis from position: 304
1 jumps found. (Code = 42) Position 1 = 351
Branch analysis from position: 351
1 jumps found. (Code = 42) Position 1 = 352
Branch analysis from position: 352
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 299
Branch analysis from position: 292
Branch analysis from position: 308
2 jumps found. (Code = 43) Position 1 = 311, Position 2 = 351
Branch analysis from position: 311
2 jumps found. (Code = 47) Position 1 = 321, Position 2 = 327
Branch analysis from position: 321
2 jumps found. (Code = 43) Position 1 = 328, Position 2 = 332
Branch analysis from position: 328
1 jumps found. (Code = 108) Position 1 = -2
Branch analysis from position: 332
1 jumps found. (Code = 42) Position 1 = 336
Branch analysis from position: 336
2 jumps found. (Code = 44) Position 1 = 340, Position 2 = 333
Branch analysis from position: 340
2 jumps found. (Code = 43) Position 1 = 344, Position 2 = 348
Branch analysis from position: 344
1 jumps found. (Code = 108) Position 1 = -2
Branch analysis from position: 348
1 jumps found. (Code = 42) Position 1 = 352
Branch analysis from position: 352
Branch analysis from position: 333
2 jumps found. (Code = 44) Position 1 = 340, Position 2 = 333
Branch analysis from position: 340
Branch analysis from position: 333
Branch analysis from position: 327
Branch analysis from position: 351
Branch analysis from position: 171
2 jumps found. (Code = 43) Position 1 = 194, Position 2 = 248
Branch analysis from position: 194
2 jumps found. (Code = 43) Position 1 = 198, Position 2 = 215
Branch analysis from position: 198
2 jumps found. (Code = 47) Position 1 = 200, Position 2 = 206
Branch analysis from position: 200
2 jumps found. (Code = 43) Position 1 = 207, Position 2 = 211
Branch analysis from position: 207
1 jumps found. (Code = 108) Position 1 = -2
Branch analysis from position: 211
1 jumps found. (Code = 42) Position 1 = 247
Branch analysis from position: 247
1 jumps found. (Code = 42) Position 1 = 250
Branch analysis from position: 250
1 jumps found. (Code = 42) Position 1 = 352
Branch analysis from position: 352
Branch analysis from position: 206
Branch analysis from position: 215
2 jumps found. (Code = 43) Position 1 = 218, Position 2 = 247
Branch analysis from position: 218
2 jumps found. (Code = 43) Position 1 = 224, Position 2 = 228
Branch analysis from position: 224
1 jumps found. (Code = 108) Position 1 = -2
Branch analysis from position: 228
1 jumps found. (Code = 42) Position 1 = 232
Branch analysis from position: 232
2 jumps found. (Code = 44) Position 1 = 236, Position 2 = 229
Branch analysis from position: 236
2 jumps found. (Code = 43) Position 1 = 240, Position 2 = 244
Branch analysis from position: 240
1 jumps found. (Code = 108) Position 1 = -2
Branch analysis from position: 244
1 jumps found. (Code = 42) Position 1 = 250
Branch analysis from position: 250
Branch analysis from position: 229
2 jumps found. (Code = 44) Position 1 = 236, Position 2 = 229
Branch analysis from position: 236
Branch analysis from position: 229
Branch analysis from position: 247
Branch analysis from position: 248
1 jumps found. (Code = 42) Position 1 = 352
Branch analysis from position: 352
Branch analysis from position: 74
2 jumps found. (Code = 43) Position 1 = 78, Position 2 = 82
Branch analysis from position: 78
1 jumps found. (Code = 108) Position 1 = -2
Branch analysis from position: 82
2 jumps found. (Code = 43) Position 1 = 87, Position 2 = 89
Branch analysis from position: 87
1 jumps found. (Code = 42) Position 1 = 90
Branch analysis from position: 90
2 jumps found. (Code = 43) Position 1 = 113, Position 2 = 117
Branch analysis from position: 113
1 jumps found. (Code = 108) Position 1 = -2
Branch analysis from position: 117
2 jumps found. (Code = 43) Position 1 = 121, Position 2 = 138
Branch analysis from position: 121
2 jumps found. (Code = 47) Position 1 = 123, Position 2 = 129
Branch analysis from position: 123
2 jumps found. (Code = 43) Position 1 = 130, Position 2 = 134
Branch analysis from position: 130
1 jumps found. (Code = 108) Position 1 = -2
Branch analysis from position: 134
1 jumps found. (Code = 42) Position 1 = 170
Branch analysis from position: 170
1 jumps found. (Code = 42) Position 1 = 352
Branch analysis from position: 352
Branch analysis from position: 129
Branch analysis from position: 138
2 jumps found. (Code = 43) Position 1 = 141, Position 2 = 170
Branch analysis from position: 141
2 jumps found. (Code = 43) Position 1 = 147, Position 2 = 151
Branch analysis from position: 147
1 jumps found. (Code = 108) Position 1 = -2
Branch analysis from position: 151
1 jumps found. (Code = 42) Position 1 = 155
Branch analysis from position: 155
2 jumps found. (Code = 44) Position 1 = 159, Position 2 = 152
Branch analysis from position: 159
2 jumps found. (Code = 43) Position 1 = 163, Position 2 = 167
Branch analysis from position: 163
1 jumps found. (Code = 108) Position 1 = -2
Branch analysis from position: 167
1 jumps found. (Code = 42) Position 1 = 352
Branch analysis from position: 352
Branch analysis from position: 152
2 jumps found. (Code = 44) Position 1 = 159, Position 2 = 152
Branch analysis from position: 159
Branch analysis from position: 152
Branch analysis from position: 170
Branch analysis from position: 89
2 jumps found. (Code = 43) Position 1 = 113, Position 2 = 117
Branch analysis from position: 113
Branch analysis from position: 117
Branch analysis from position: 74
Branch analysis from position: 62
2 jumps found. (Code = 44) Position 1 = 67, Position 2 = 74
Branch analysis from position: 67
Branch analysis from position: 74
Branch analysis from position: 19
2 jumps found. (Code = 46) Position 1 = 21, Position 2 = 24
Branch analysis from position: 21
2 jumps found. (Code = 46) Position 1 = 25, Position 2 = 30
Branch analysis from position: 25
2 jumps found. (Code = 46) Position 1 = 27, Position 2 = 29
Branch analysis from position: 27
2 jumps found. (Code = 46) Position 1 = 31, Position 2 = 38
Branch analysis from position: 31
2 jumps found. (Code = 47) Position 1 = 34, Position 2 = 37
Branch analysis from position: 34
2 jumps found. (Code = 46) Position 1 = 39, Position 2 = 42
Branch analysis from position: 39
2 jumps found. (Code = 43) Position 1 = 43, Position 2 = 44
Branch analysis from position: 43
2 jumps found. (Code = 43) Position 1 = 47, Position 2 = 52
Branch analysis from position: 47
Branch analysis from position: 52
Branch analysis from position: 44
Branch analysis from position: 42
Branch analysis from position: 37
Branch analysis from position: 38
Branch analysis from position: 29
Branch analysis from position: 30
Branch analysis from position: 24
Branch analysis from position: 12
Found catch point at position: 358
Branch analysis from position: 358
2 jumps found. (Code = 107) Position 1 = 359, Position 2 = -2
Branch analysis from position: 359
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/P0i1r
function name:  call_user_func_array_fixed
number of ops:  369
compiled vars:  !0 = $callable, !1 = $args, !2 = $isStaticMethod, !3 = $expr, !4 = $matches, !5 = $func, !6 = $backtrace, !7 = $called, !8 = $contextKey, !9 = $contextClass, !10 = $contextClassName, !11 = $method, !12 = $ownerClassName, !13 = $invokeContext, !14 = $e
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
          0  E >   RECV                                             !0      
          1        RECV                                             !1      
          2        ASSIGN                                                   !2, <false>
          3        ASSIGN                                                   !3, '%2F%5E%28%5Ba-z_%5Cx7f-%5Cxff%5D%5B%5Cw%5Cx7f-%5Cxff%5D%2A%29%3A%3A%28%5Ba-z_%5Cx7f-%5Cxff%5D%5B%5Cw%5Cx7f-%5Cxff%5D%2A%29%24%2Fi'
          4        TYPE_CHECK                                   64  ~17     !0
          5      > JMPZ_EX                                          ~17     ~17, ->12
          6    >   INIT_FCALL                                               'preg_match'
          7        SEND_VAR                                                 !3
          8        SEND_VAR                                                 !0
          9        SEND_REF                                                 !4
         10        DO_ICALL                                         $18     
         11        BOOL                                             ~17     $18
         12    > > JMPZ                                                     ~17, ->19
         13    >   FETCH_DIM_R                                      ~19     !4, 1
         14        INIT_ARRAY                                       ~20     ~19
         15        FETCH_DIM_R                                      ~21     !4, 2
         16        ADD_ARRAY_ELEMENT                                ~20     ~21
         17        ASSIGN                                                   !5, ~20
         18      > JMP                                                      ->44
         19    >   TYPE_CHECK                                  128  ~23     !0
         20      > JMPZ_EX                                          ~23     ~23, ->24
         21    >   COUNT                                            ~24     !0
         22        IS_IDENTICAL                                     ~25     ~24, 2
         23        BOOL                                             ~23     ~25
         24    > > JMPZ_EX                                          ~23     ~23, ->30
         25    >   ISSET_ISEMPTY_DIM_OBJ                         0  ~26     !0, 0
         26      > JMPZ_EX                                          ~26     ~26, ->29
         27    >   ISSET_ISEMPTY_DIM_OBJ                         0  ~27     !0, 1
         28        BOOL                                             ~26     ~27
         29    >   BOOL                                             ~23     ~26
         30    > > JMPZ_EX                                          ~23     ~23, ->38
         31    >   FETCH_DIM_R                                      ~28     !0, 0
         32        TYPE_CHECK                                   64  ~29     ~28
         33      > JMPNZ_EX                                         ~29     ~29, ->37
         34    >   FETCH_DIM_R                                      ~30     !0, 0
         35        TYPE_CHECK                                  256  ~31     ~30
         36        BOOL                                             ~29     ~31
         37    >   BOOL                                             ~23     ~29
         38    > > JMPZ_EX                                          ~23     ~23, ->42
         39    >   FETCH_DIM_R                                      ~32     !0, 1
         40        TYPE_CHECK                                   64  ~33     ~32
         41        BOOL                                             ~23     ~33
         42    > > JMPZ                                                     ~23, ->44
         43    >   ASSIGN                                                   !5, !0
         44    >   ISSET_ISEMPTY_CV                                 ~35     !5
         45        BOOL_NOT                                         ~36     ~35
         46      > JMPZ                                                     ~36, ->52
         47    >   INIT_USER_CALL                                0          'call_user_func_array', !5
         48        SEND_ARRAY                                               !1
         49        CHECK_UNDEF_ARGS                                         
         50        DO_FCALL                                      0  $37     
         51      > RETURN                                                   $37
         52    >   INIT_FCALL                                               'debug_backtrace'
         53        DO_ICALL                                         $38     
         54        ASSIGN                                                   !6, $38
         55        FETCH_DIM_R                                      ~40     !6, 1
         56        FETCH_DIM_R                                      ~41     ~40, 'function'
         57        IS_IDENTICAL                                             ~41, 'call_user_func_fixed'
         58      > JMPZ                                                     ~42, ->62
         59    >   ASSIGN                                                   !7, 'call_user_func_fixed'
         60        ASSIGN                                                   !8, 2
         61      > JMP                                                      ->64
         62    >   ASSIGN                                                   !7, 'call_user_func_array_fixed'
         63        ASSIGN                                                   !8, 1
         64    >   FETCH_DIM_R                                      ~48     !5, 0
         65        IS_IDENTICAL                                             ~48, 'self'
         66      > JMPNZ                                                    ~49, ->74
         67    >   FETCH_DIM_R                                      ~50     !5, 0
         68        IS_IDENTICAL                                             ~50, 'static'
         69      > JMPNZ                                                    ~51, ->74
         70    >   FETCH_DIM_R                                      ~52     !5, 0
         71        TYPE_CHECK                                  256          ~52
         72      > JMPNZ                                                    ~53, ->171
         73    > > JMP                                                      ->251
         74    >   FETCH_DIM_IS                                     ~54     !6, !8
         75        ISSET_ISEMPTY_DIM_OBJ                         0  ~55     ~54, 'object'
         76        BOOL_NOT                                         ~56     ~55
         77      > JMPZ                                                     ~56, ->82
         78    >   NEW                                              $57     'Exception'
         79        SEND_VAL_EX                                              'Use+of+self%3A%3A+in+an+invalid+context'
         80        DO_FCALL                                      0          
         81      > THROW                                         0          $57
         82    >   NEW                                              $59     'ReflectionClass'
         83        CHECK_FUNC_ARG                                           
         84        FETCH_DIM_R                                      ~61     !5, 0
         85        IS_IDENTICAL                                             ~61, 'self'
         86      > JMPZ                                                     ~62, ->89
         87    >   QM_ASSIGN                                        ~63     'class'
         88      > JMP                                                      ->90
         89    >   QM_ASSIGN                                        ~63     'object'
         90    >   FETCH_DIM_FUNC_ARG                               $60     !6, !8
         91        FETCH_DIM_FUNC_ARG                               $64     $60, ~63
         92        SEND_FUNC_ARG                                            $64
         93        DO_FCALL                                      0          
         94        ASSIGN                                                   !9, $59
         95        INIT_METHOD_CALL                                         !9, 'getName'
         96        DO_FCALL                                      0  $67     
         97        ASSIGN                                                   !10, $67
         98        INIT_METHOD_CALL                                         !9, 'getMethod'
         99        CHECK_FUNC_ARG                                           
        100        FETCH_DIM_FUNC_ARG                               $69     !5, 1
        101        SEND_FUNC_ARG                                            $69
        102        DO_FCALL                                      0  $70     
        103        ASSIGN                                                   !11, $70
        104        INIT_METHOD_CALL                                         !11, 'getDeclaringClass'
        105        DO_FCALL                                      0  $72     
        106        INIT_METHOD_CALL                                         $72, 'getName'
        107        DO_FCALL                                      0  $73     
        108        ASSIGN                                                   !12, $73
        109        INIT_METHOD_CALL                                         !11, 'isStatic'
        110        DO_FCALL                                      0  $75     
        111        BOOL_NOT                                         ~76     $75
        112      > JMPZ                                                     ~76, ->117
        113    >   NEW                                              $77     'Exception'
        114        SEND_VAL_EX                                              'Attempting+to+call+instance+method+in+a+static+context'
        115        DO_FCALL                                      0          
        116      > THROW                                         0          $77
        117    >   ASSIGN                                                   !13, null
        118        INIT_METHOD_CALL                                         !11, 'isPrivate'
        119        DO_FCALL                                      0  $80     
        120      > JMPZ                                                     $80, ->138
        121    >   IS_NOT_IDENTICAL                                 ~81     !12, !10
        122      > JMPNZ_EX                                         ~81     ~81, ->129
        123    >   INIT_FCALL                                               'method_exists'
        124        SEND_VAR                                                 !11
        125        SEND_VAL                                                 'setAccessible'
        126        DO_ICALL                                         $82     
        127        BOOL_NOT                                         ~83     $82
        128        BOOL                                             ~81     ~83
        129    > > JMPZ                                                     ~81, ->134
        130    >   NEW                                              $84     'Exception'
        131        SEND_VAL_EX                                              'Attempting+to+call+private+method+in+an+invalid+context'
        132        DO_FCALL                                      0          
        133      > THROW                                         0          $84
        134    >   INIT_METHOD_CALL                                         !11, 'setAccessible'
        135        SEND_VAL_EX                                              <true>
        136        DO_FCALL                                      0          
        137      > JMP                                                      ->170
        138    >   INIT_METHOD_CALL                                         !11, 'isProtected'
        139        DO_FCALL                                      0  $87     
        140      > JMPZ                                                     $87, ->170
        141    >   INIT_FCALL                                               'method_exists'
        142        SEND_VAR                                                 !11
        143        SEND_VAL                                                 'setAccessible'
        144        DO_ICALL                                         $88     
        145        BOOL_NOT                                         ~89     $88
        146      > JMPZ                                                     ~89, ->151
        147    >   NEW                                              $90     'Exception'
        148        SEND_VAL_EX                                              'Attempting+to+call+protected+method+in+an+invalid+context'
        149        DO_FCALL                                      0          
        150      > THROW                                         0          $90
        151    > > JMP                                                      ->155
        152    >   INIT_METHOD_CALL                                         !9, 'getParentClass'
        153        DO_FCALL                                      0  $92     
        154        ASSIGN                                                   !9, $92
        155    >   INIT_METHOD_CALL                                         !9, 'getName'
        156        DO_FCALL                                      0  $94     
        157        IS_NOT_IDENTICAL                                         !12, $94
        158      > JMPNZ                                                    ~95, ->152
        159    >   INIT_METHOD_CALL                                         !9, 'getName'
        160        DO_FCALL                                      0  $96     
        161        IS_NOT_IDENTICAL                                         !12, $96
        162      > JMPZ                                                     ~97, ->167
        163    >   NEW                                              $98     'Exception'
        164        SEND_VAL_EX                                              'Attempting+to+call+protected+method+in+an+invalid+context'
        165        DO_FCALL                                      0          
        166      > THROW                                         0          $98
        167    >   INIT_METHOD_CALL                                         !11, 'setAccessible'
        168        SEND_VAL_EX                                              <true>
        169        DO_FCALL                                      0          
        170    > > JMP                                                      ->352
        171    >   NEW                                              $101    'ReflectionClass'
        172        CHECK_FUNC_ARG                                           
        173        FETCH_DIM_FUNC_ARG                               $102    !5, 0
        174        SEND_FUNC_ARG                                            $102
        175        DO_FCALL                                      0          
        176        ASSIGN                                                   !9, $101
        177        INIT_METHOD_CALL                                         !9, 'getName'
        178        DO_FCALL                                      0  $105    
        179        ASSIGN                                                   !10, $105
        180        INIT_METHOD_CALL                                         !9, 'getMethod'
        181        CHECK_FUNC_ARG                                           
        182        FETCH_DIM_FUNC_ARG                               $107    !5, 1
        183        SEND_FUNC_ARG                                            $107
        184        DO_FCALL                                      0  $108    
        185        ASSIGN                                                   !11, $108
        186        INIT_METHOD_CALL                                         !11, 'getDeclaringClass'
        187        DO_FCALL                                      0  $110    
        188        INIT_METHOD_CALL                                         $110, 'getName'
        189        DO_FCALL                                      0  $111    
        190        ASSIGN                                                   !12, $111
        191        INIT_METHOD_CALL                                         !11, 'isStatic'
        192        DO_FCALL                                      0  $113    
        193      > JMPZ                                                     $113, ->248
        194    >   ASSIGN                                                   !13, null
        195        INIT_METHOD_CALL                                         !11, 'isPrivate'
        196        DO_FCALL                                      0  $115    
        197      > JMPZ                                                     $115, ->215
        198    >   IS_NOT_IDENTICAL                                 ~116    !12, !10
        199      > JMPNZ_EX                                         ~116    ~116, ->206
        200    >   INIT_FCALL                                               'method_exists'
        201        SEND_VAR                                                 !11
        202        SEND_VAL                                                 'setAccessible'
        203        DO_ICALL                                         $117    
        204        BOOL_NOT                                         ~118    $117
        205        BOOL                                             ~116    ~118
        206    > > JMPZ                                                     ~116, ->211
        207    >   NEW                                              $119    'Exception'
        208        SEND_VAL_EX                                              'Attempting+to+call+private+method+in+an+invalid+context'
        209        DO_FCALL                                      0          
        210      > THROW                                         0          $119
        211    >   INIT_METHOD_CALL                                         !11, 'setAccessible'
        212        SEND_VAL_EX                                              <true>
        213        DO_FCALL                                      0          
        214      > JMP                                                      ->247
        215    >   INIT_METHOD_CALL                                         !11, 'isProtected'
        216        DO_FCALL                                      0  $122    
        217      > JMPZ                                                     $122, ->247
        218    >   INIT_FCALL                                               'method_exists'
        219        SEND_VAR                                                 !11
        220        SEND_VAL                                                 'setAccessible'
        221        DO_ICALL                                         $123    
        222        BOOL_NOT                                         ~124    $123
        223      > JMPZ                                                     ~124, ->228
        224    >   NEW                                              $125    'Exception'
        225        SEND_VAL_EX                                              'Attempting+to+call+protected+method+in+an+invalid+context'
        226        DO_FCALL                                      0          
        227      > THROW                                         0          $125
        228    > > JMP                                                      ->232
        229    >   INIT_METHOD_CALL                                         !9, 'getParentClass'
        230        DO_FCALL                                      0  $127    
        231        ASSIGN                                                   !9, $127
        232    >   INIT_METHOD_CALL                                         !9, 'getName'
        233        DO_FCALL                                      0  $129    
        234        IS_NOT_IDENTICAL                                         !12, $129
        235      > JMPNZ                                                    ~130, ->229
        236    >   INIT_METHOD_CALL                                         !9, 'getName'
        237        DO_FCALL                                      0  $131    
        238        IS_NOT_IDENTICAL                                         !12, $131
        239      > JMPZ                                                     ~132, ->244
        240    >   NEW                                              $133    'Exception'
        241        SEND_VAL_EX                         

Generated using Vulcan Logic Dumper, using php 8.0.0


preferences:
177.89 ms | 1428 KiB | 21 Q