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':if(!isset($backtrace[$contextKey]['class'])){ throw new Exception('Use of self:: in an invalid context');}$contextClass=new ReflectionClass($backtrace[$contextKey]['class']);$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 $func[0]==='static':if(!isset($backtrace[$contextKey]['class'])){ throw new Exception('Use of static:: in an invalid context');}$contextClass=new ReflectionClass($backtrace[$contextKey]['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('static','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/Dalec
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/Dalec
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 = 165
Branch analysis from position: 70
2 jumps found. (Code = 44) Position 1 = 73, Position 2 = 256
Branch analysis from position: 73
1 jumps found. (Code = 42) Position 1 = 336
Branch analysis from position: 336
2 jumps found. (Code = 43) Position 1 = 361, Position 2 = 365
Branch analysis from position: 361
1 jumps found. (Code = 108) Position 1 = -2
Branch analysis from position: 365
2 jumps found. (Code = 43) Position 1 = 369, Position 2 = 393
Branch analysis from position: 369
2 jumps found. (Code = 47) Position 1 = 372, Position 2 = 377
Branch analysis from position: 372
2 jumps found. (Code = 47) Position 1 = 378, Position 2 = 384
Branch analysis from position: 378
2 jumps found. (Code = 43) Position 1 = 385, Position 2 = 389
Branch analysis from position: 385
1 jumps found. (Code = 108) Position 1 = -2
Branch analysis from position: 389
1 jumps found. (Code = 42) Position 1 = 436
Branch analysis from position: 436
1 jumps found. (Code = 42) Position 1 = 437
Branch analysis from position: 437
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 384
Branch analysis from position: 377
Branch analysis from position: 393
2 jumps found. (Code = 43) Position 1 = 396, Position 2 = 436
Branch analysis from position: 396
2 jumps found. (Code = 47) Position 1 = 406, Position 2 = 412
Branch analysis from position: 406
2 jumps found. (Code = 43) Position 1 = 413, Position 2 = 417
Branch analysis from position: 413
1 jumps found. (Code = 108) Position 1 = -2
Branch analysis from position: 417
1 jumps found. (Code = 42) Position 1 = 421
Branch analysis from position: 421
2 jumps found. (Code = 44) Position 1 = 425, Position 2 = 418
Branch analysis from position: 425
2 jumps found. (Code = 43) Position 1 = 429, Position 2 = 433
Branch analysis from position: 429
1 jumps found. (Code = 108) Position 1 = -2
Branch analysis from position: 433
1 jumps found. (Code = 42) Position 1 = 437
Branch analysis from position: 437
Branch analysis from position: 418
2 jumps found. (Code = 44) Position 1 = 425, Position 2 = 418
Branch analysis from position: 425
Branch analysis from position: 418
Branch analysis from position: 412
Branch analysis from position: 436
Branch analysis from position: 256
2 jumps found. (Code = 43) Position 1 = 279, Position 2 = 333
Branch analysis from position: 279
2 jumps found. (Code = 43) Position 1 = 283, Position 2 = 300
Branch analysis from position: 283
2 jumps found. (Code = 47) Position 1 = 285, Position 2 = 291
Branch analysis from position: 285
2 jumps found. (Code = 43) Position 1 = 292, Position 2 = 296
Branch analysis from position: 292
1 jumps found. (Code = 108) Position 1 = -2
Branch analysis from position: 296
1 jumps found. (Code = 42) Position 1 = 332
Branch analysis from position: 332
1 jumps found. (Code = 42) Position 1 = 335
Branch analysis from position: 335
1 jumps found. (Code = 42) Position 1 = 437
Branch analysis from position: 437
Branch analysis from position: 291
Branch analysis from position: 300
2 jumps found. (Code = 43) Position 1 = 303, Position 2 = 332
Branch analysis from position: 303
2 jumps found. (Code = 43) Position 1 = 309, Position 2 = 313
Branch analysis from position: 309
1 jumps found. (Code = 108) Position 1 = -2
Branch analysis from position: 313
1 jumps found. (Code = 42) Position 1 = 317
Branch analysis from position: 317
2 jumps found. (Code = 44) Position 1 = 321, Position 2 = 314
Branch analysis from position: 321
2 jumps found. (Code = 43) Position 1 = 325, Position 2 = 329
Branch analysis from position: 325
1 jumps found. (Code = 108) Position 1 = -2
Branch analysis from position: 329
1 jumps found. (Code = 42) Position 1 = 335
Branch analysis from position: 335
Branch analysis from position: 314
2 jumps found. (Code = 44) Position 1 = 321, Position 2 = 314
Branch analysis from position: 321
Branch analysis from position: 314
Branch analysis from position: 332
Branch analysis from position: 333
1 jumps found. (Code = 42) Position 1 = 437
Branch analysis from position: 437
Branch analysis from position: 165
2 jumps found. (Code = 43) Position 1 = 169, Position 2 = 173
Branch analysis from position: 169
1 jumps found. (Code = 108) Position 1 = -2
Branch analysis from position: 173
2 jumps found. (Code = 43) Position 1 = 198, Position 2 = 202
Branch analysis from position: 198
1 jumps found. (Code = 108) Position 1 = -2
Branch analysis from position: 202
2 jumps found. (Code = 43) Position 1 = 206, Position 2 = 223
Branch analysis from position: 206
2 jumps found. (Code = 47) Position 1 = 208, Position 2 = 214
Branch analysis from position: 208
2 jumps found. (Code = 43) Position 1 = 215, Position 2 = 219
Branch analysis from position: 215
1 jumps found. (Code = 108) Position 1 = -2
Branch analysis from position: 219
1 jumps found. (Code = 42) Position 1 = 255
Branch analysis from position: 255
1 jumps found. (Code = 42) Position 1 = 437
Branch analysis from position: 437
Branch analysis from position: 214
Branch analysis from position: 223
2 jumps found. (Code = 43) Position 1 = 226, Position 2 = 255
Branch analysis from position: 226
2 jumps found. (Code = 43) Position 1 = 232, Position 2 = 236
Branch analysis from position: 232
1 jumps found. (Code = 108) Position 1 = -2
Branch analysis from position: 236
1 jumps found. (Code = 42) Position 1 = 240
Branch analysis from position: 240
2 jumps found. (Code = 44) Position 1 = 244, Position 2 = 237
Branch analysis from position: 244
2 jumps found. (Code = 43) Position 1 = 248, Position 2 = 252
Branch analysis from position: 248
1 jumps found. (Code = 108) Position 1 = -2
Branch analysis from position: 252
1 jumps found. (Code = 42) Position 1 = 437
Branch analysis from position: 437
Branch analysis from position: 237
2 jumps found. (Code = 44) Position 1 = 244, Position 2 = 237
Branch analysis from position: 244
Branch analysis from position: 237
Branch analysis from position: 255
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 = 107, Position 2 = 111
Branch analysis from position: 107
1 jumps found. (Code = 108) Position 1 = -2
Branch analysis from position: 111
2 jumps found. (Code = 43) Position 1 = 115, Position 2 = 132
Branch analysis from position: 115
2 jumps found. (Code = 47) Position 1 = 117, Position 2 = 123
Branch analysis from position: 117
2 jumps found. (Code = 43) Position 1 = 124, Position 2 = 128
Branch analysis from position: 124
1 jumps found. (Code = 108) Position 1 = -2
Branch analysis from position: 128
1 jumps found. (Code = 42) Position 1 = 164
Branch analysis from position: 164
1 jumps found. (Code = 42) Position 1 = 437
Branch analysis from position: 437
Branch analysis from position: 123
Branch analysis from position: 132
2 jumps found. (Code = 43) Position 1 = 135, Position 2 = 164
Branch analysis from position: 135
2 jumps found. (Code = 43) Position 1 = 141, Position 2 = 145
Branch analysis from position: 141
1 jumps found. (Code = 108) Position 1 = -2
Branch analysis from position: 145
1 jumps found. (Code = 42) Position 1 = 149
Branch analysis from position: 149
2 jumps found. (Code = 44) Position 1 = 153, Position 2 = 146
Branch analysis from position: 153
2 jumps found. (Code = 43) Position 1 = 157, Position 2 = 161
Branch analysis from position: 157
1 jumps found. (Code = 108) Position 1 = -2
Branch analysis from position: 161
1 jumps found. (Code = 42) Position 1 = 437
Branch analysis from position: 437
Branch analysis from position: 146
2 jumps found. (Code = 44) Position 1 = 153, Position 2 = 146
Branch analysis from position: 153
Branch analysis from position: 146
Branch analysis from position: 164
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: 443
Branch analysis from position: 443
2 jumps found. (Code = 107) Position 1 = 444, Position 2 = -2
Branch analysis from position: 444
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/Dalec
function name:  call_user_func_array_fixed
number of ops:  454
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, ->165
         70    >   FETCH_DIM_R                                      ~52     !5, 0
         71        TYPE_CHECK                                  256          ~52
         72      > JMPNZ                                                    ~53, ->256
         73    > > JMP                                                      ->336
         74    >   FETCH_DIM_IS                                     ~54     !6, !8
         75        ISSET_ISEMPTY_DIM_OBJ                         0  ~55     ~54, 'class'
         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_FUNC_ARG                               $60     !6, !8
         85        FETCH_DIM_FUNC_ARG                               $61     $60, 'class'
         86        SEND_FUNC_ARG                                            $61
         87        DO_FCALL                                      0          
         88        ASSIGN                                                   !9, $59
         89        INIT_METHOD_CALL                                         !9, 'getName'
         90        DO_FCALL                                      0  $64     
         91        ASSIGN                                                   !10, $64
         92        INIT_METHOD_CALL                                         !9, 'getMethod'
         93        CHECK_FUNC_ARG                                           
         94        FETCH_DIM_FUNC_ARG                               $66     !5, 1
         95        SEND_FUNC_ARG                                            $66
         96        DO_FCALL                                      0  $67     
         97        ASSIGN                                                   !11, $67
         98        INIT_METHOD_CALL                                         !11, 'getDeclaringClass'
         99        DO_FCALL                                      0  $69     
        100        INIT_METHOD_CALL                                         $69, 'getName'
        101        DO_FCALL                                      0  $70     
        102        ASSIGN                                                   !12, $70
        103        INIT_METHOD_CALL                                         !11, 'isStatic'
        104        DO_FCALL                                      0  $72     
        105        BOOL_NOT                                         ~73     $72
        106      > JMPZ                                                     ~73, ->111
        107    >   NEW                                              $74     'Exception'
        108        SEND_VAL_EX                                              'Attempting+to+call+instance+method+in+a+static+context'
        109        DO_FCALL                                      0          
        110      > THROW                                         0          $74
        111    >   ASSIGN                                                   !13, null
        112        INIT_METHOD_CALL                                         !11, 'isPrivate'
        113        DO_FCALL                                      0  $77     
        114      > JMPZ                                                     $77, ->132
        115    >   IS_NOT_IDENTICAL                                 ~78     !12, !10
        116      > JMPNZ_EX                                         ~78     ~78, ->123
        117    >   INIT_FCALL                                               'method_exists'
        118        SEND_VAR                                                 !11
        119        SEND_VAL                                                 'setAccessible'
        120        DO_ICALL                                         $79     
        121        BOOL_NOT                                         ~80     $79
        122        BOOL                                             ~78     ~80
        123    > > JMPZ                                                     ~78, ->128
        124    >   NEW                                              $81     'Exception'
        125        SEND_VAL_EX                                              'Attempting+to+call+private+method+in+an+invalid+context'
        126        DO_FCALL                                      0          
        127      > THROW                                         0          $81
        128    >   INIT_METHOD_CALL                                         !11, 'setAccessible'
        129        SEND_VAL_EX                                              <true>
        130        DO_FCALL                                      0          
        131      > JMP                                                      ->164
        132    >   INIT_METHOD_CALL                                         !11, 'isProtected'
        133        DO_FCALL                                      0  $84     
        134      > JMPZ                                                     $84, ->164
        135    >   INIT_FCALL                                               'method_exists'
        136        SEND_VAR                                                 !11
        137        SEND_VAL                                                 'setAccessible'
        138        DO_ICALL                                         $85     
        139        BOOL_NOT                                         ~86     $85
        140      > JMPZ                                                     ~86, ->145
        141    >   NEW                                              $87     'Exception'
        142        SEND_VAL_EX                                              'Attempting+to+call+protected+method+in+an+invalid+context'
        143        DO_FCALL                                      0          
        144      > THROW                                         0          $87
        145    > > JMP                                                      ->149
        146    >   INIT_METHOD_CALL                                         !9, 'getParentClass'
        147        DO_FCALL                                      0  $89     
        148        ASSIGN                                                   !9, $89
        149    >   INIT_METHOD_CALL                                         !9, 'getName'
        150        DO_FCALL                                      0  $91     
        151        IS_NOT_IDENTICAL                                         !12, $91
        152      > JMPNZ                                                    ~92, ->146
        153    >   INIT_METHOD_CALL                                         !9, 'getName'
        154        DO_FCALL                                      0  $93     
        155        IS_NOT_IDENTICAL                                         !12, $93
        156      > JMPZ                                                     ~94, ->161
        157    >   NEW                                              $95     'Exception'
        158        SEND_VAL_EX                                              'Attempting+to+call+protected+method+in+an+invalid+context'
        159        DO_FCALL                                      0          
        160      > THROW                                         0          $95
        161    >   INIT_METHOD_CALL                                         !11, 'setAccessible'
        162        SEND_VAL_EX                                              <true>
        163        DO_FCALL                                      0          
        164    > > JMP                                                      ->437
        165    >   FETCH_DIM_IS                                     ~98     !6, !8
        166        ISSET_ISEMPTY_DIM_OBJ                         0  ~99     ~98, 'class'
        167        BOOL_NOT                                         ~100    ~99
        168      > JMPZ                                                     ~100, ->173
        169    >   NEW                                              $101    'Exception'
        170        SEND_VAL_EX                                              'Use+of+static%3A%3A+in+an+invalid+context'
        171        DO_FCALL                                      0          
        172      > THROW                                         0          $101
        173    >   NEW                                              $103    'ReflectionClass'
        174        CHECK_FUNC_ARG                                           
        175        FETCH_DIM_FUNC_ARG                               $104    !6, !8
        176        FETCH_DIM_FUNC_ARG                               $105    $104, 'object'
        177        SEND_FUNC_ARG                                            $105
        178        DO_FCALL                                      0          
        179        ASSIGN                                                   !9, $103
        180        INIT_METHOD_CALL                                         !9, 'getName'
        181        DO_FCALL                                      0  $108    
        182        ASSIGN                                                   !10, $108
        183        INIT_METHOD_CALL                                         !9, 'getMethod'
        184        CHECK_FUNC_ARG                                           
        185        FETCH_DIM_FUNC_ARG                               $110    !5, 1
        186        SEND_FUNC_ARG                                            $110
        187        DO_FCALL                                      0  $111    
        188        ASSIGN                                                   !11, $111
        189        INIT_METHOD_CALL                                         !11, 'getDeclaringClass'
        190        DO_FCALL                                      0  $113    
        191        INIT_METHOD_CALL                                         $113, 'getName'
        192        DO_FCALL                                      0  $114    
        193        ASSIGN                                                   !12, $114
        194        INIT_METHOD_CALL                                         !11, 'isStatic'
        195        DO_FCALL                                      0  $116    
        196        BOOL_NOT                                         ~117    $116
        197      > JMPZ                                                     ~117, ->202
        198    >   NEW                                              $118    'Exception'
        199        SEND_VAL_EX                                              'Attempting+to+call+instance+method+in+a+static+context'
        200        DO_FCALL                                      0          
        201      > THROW                                         0          $118
        202    >   ASSIGN                                                   !13, null
        203        INIT_METHOD_CALL                                         !11, 'isPrivate'
        204        DO_FCALL                                      0  $121    
        205      > JMPZ                                                     $121, ->223
        206    >   IS_NOT_IDENTICAL                                 ~122    !12, !10
        207      > JMPNZ_EX                                         ~122    ~122, ->214
        208    >   INIT_FCALL                                               'method_exists'
        209        SEND_VAR                                                 !11
        210        SEND_VAL                                                 'setAccessible'
        211        DO_ICALL                                         $123    
        212        BOOL_NOT                                         ~124    $123
        213        BOOL                                             ~122    ~124
        214    > > JMPZ                                                     ~122, ->219
        215    >   NEW                                              $125    'Exception'
        216        SEND_VAL_EX                                              'Attempting+to+call+private+method+in+an+invalid+context'
        217        DO_FCALL                                      0          
        218      > THROW                                         0          $125
        219    >   INIT_METHOD_CALL                                         !11, 'setAccessible'
        220        SEND_VAL_EX                                              <true>
        221        DO_FCALL                                      0          
        222      > JMP                                                      ->255
        223    >   INIT_METHOD_CALL      

Generated using Vulcan Logic Dumper, using php 8.0.0


preferences:
160.89 ms | 1428 KiB | 21 Q