1--TEST--
2ReflectionMethod::invokeArgs() further errors
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 static function staticMethod() {
16        echo "Called staticMethod()\n";
17        try {
18	        var_dump($this);
19		} catch (Throwable $e) {
20			echo "Exception: " . $e->getMessage() . "\n";
21		}
22    }
23
24    private static function privateMethod() {
25        echo "Called privateMethod()\n";
26    }
27}
28
29abstract class AbstractClass {
30    abstract function foo();
31}
32
33$testClassInstance = new TestClass();
34$testClassInstance->prop = "Hello";
35
36$foo = new ReflectionMethod($testClassInstance, 'foo');
37$staticMethod = new ReflectionMethod('TestClass::staticMethod');
38$privateMethod = new ReflectionMethod("TestClass::privateMethod");
39
40echo "Wrong number of parameters:\n";
41var_dump($foo->invokeArgs());
42var_dump($foo->invokeArgs(true));
43
44echo "\nNon-instance:\n";
45try {
46    var_dump($foo->invokeArgs(new stdClass(), array()));
47} catch (ReflectionException $e) {
48    var_dump($e->getMessage());
49}
50
51echo "\nNon-object:\n";
52var_dump($foo->invokeArgs(true, array()));
53
54echo "\nStatic method:\n";
55
56var_dump($staticMethod->invokeArgs());
57var_dump($staticMethod->invokeArgs(true));
58var_dump($staticMethod->invokeArgs(true, array()));
59var_dump($staticMethod->invokeArgs(null, array()));
60
61echo "\nPrivate method:\n";
62try {
63    var_dump($privateMethod->invokeArgs($testClassInstance, array()));
64} catch (ReflectionException $e) {
65    var_dump($e->getMessage());
66}
67
68echo "\nAbstract method:\n";
69$abstractMethod = new ReflectionMethod("AbstractClass::foo");
70try {
71    $abstractMethod->invokeArgs($testClassInstance, array());
72} catch (ReflectionException $e) {
73    var_dump($e->getMessage());
74}
75try {
76    $abstractMethod->invokeArgs(true);
77} catch (ReflectionException $e) {
78    var_dump($e->getMessage());
79}
80
81?>
82--EXPECTF--
83Wrong number of parameters:
84
85Warning: ReflectionMethod::invokeArgs() expects exactly 2 parameters, 0 given in %s on line %d
86NULL
87
88Warning: ReflectionMethod::invokeArgs() expects exactly 2 parameters, 1 given in %s on line %d
89NULL
90
91Non-instance:
92string(72) "Given object is not an instance of the class this method was declared in"
93
94Non-object:
95
96Warning: ReflectionMethod::invokeArgs() expects parameter 1 to be object, bool given in %s on line %d
97NULL
98
99Static method:
100
101Warning: ReflectionMethod::invokeArgs() expects exactly 2 parameters, 0 given in %s on line %d
102NULL
103
104Warning: ReflectionMethod::invokeArgs() expects exactly 2 parameters, 1 given in %s on line %d
105NULL
106
107Warning: ReflectionMethod::invokeArgs() expects parameter 1 to be object, bool given in %s on line %d
108NULL
109Called staticMethod()
110Exception: Using $this when not in object context
111NULL
112
113Private method:
114string(86) "Trying to invoke private method TestClass::privateMethod() from scope ReflectionMethod"
115
116Abstract method:
117string(53) "Trying to invoke abstract method AbstractClass::foo()"
118string(53) "Trying to invoke abstract method AbstractClass::foo()"
119