1--TEST-- 2ReflectionMethod::invoke() 3--FILE-- 4<?php 5 6class TestClass { 7 public $prop = 2; 8 9 public function foo() { 10 echo "Called foo(), property = $this->prop\n"; 11 var_dump($this); 12 return "Return Val"; 13 } 14 15 public function willThrow() { 16 throw new Exception("Called willThrow()"); 17 } 18 19 public function methodWithArgs($a, $b) { 20 echo "Called methodWithArgs($a, $b)\n"; 21 } 22 23 public static function staticMethod() { 24 echo "Called staticMethod()\n"; 25 try { 26 var_dump($this); 27 } catch (Throwable $e) { 28 echo "Exception: " . $e->getMessage() . "\n"; 29 } 30 } 31 32 private static function privateMethod() { 33 echo "Called privateMethod()\n"; 34 } 35} 36 37abstract class AbstractClass { 38 abstract function foo(); 39} 40 41$foo = new ReflectionMethod('TestClass', 'foo'); 42$methodWithArgs = new ReflectionMethod('TestClass', 'methodWithArgs'); 43$staticMethod = new ReflectionMethod('TestClass::staticMethod'); 44$privateMethod = new ReflectionMethod("TestClass::privateMethod"); 45$methodThatThrows = new ReflectionMethod("TestClass::willThrow"); 46 47$testClassInstance = new TestClass(); 48$testClassInstance->prop = "Hello"; 49 50echo "Public method:\n"; 51 52var_dump($foo->invoke($testClassInstance)); 53 54var_dump($foo->invoke($testClassInstance, true)); 55 56echo "\nMethod with args:\n"; 57 58var_dump($methodWithArgs->invoke($testClassInstance, 1, "arg2")); 59var_dump($methodWithArgs->invoke($testClassInstance, 1, "arg2", 3)); 60 61echo "\nStatic method:\n"; 62 63var_dump($staticMethod->invoke()); 64var_dump($staticMethod->invoke(true)); 65var_dump($staticMethod->invoke(new stdClass())); 66 67echo "\nMethod that throws an exception:\n"; 68try { 69 var_dump($methodThatThrows->invoke($testClassInstance)); 70} catch (Exception $exc) { 71 var_dump($exc->getMessage()); 72} 73 74?> 75--EXPECTF-- 76Public method: 77Called foo(), property = Hello 78object(TestClass)#%d (1) { 79 ["prop"]=> 80 string(5) "Hello" 81} 82string(10) "Return Val" 83Called foo(), property = Hello 84object(TestClass)#%d (1) { 85 ["prop"]=> 86 string(5) "Hello" 87} 88string(10) "Return Val" 89 90Method with args: 91Called methodWithArgs(1, arg2) 92NULL 93Called methodWithArgs(1, arg2) 94NULL 95 96Static method: 97 98Warning: ReflectionMethod::invoke() expects at least 1 parameter, 0 given in %s on line %d 99NULL 100 101Warning: ReflectionMethod::invoke() expects parameter 1 to be object, boolean given in %s on line %d 102NULL 103Called staticMethod() 104Exception: Using $this when not in object context 105NULL 106 107Method that throws an exception: 108string(18) "Called willThrow()" 109