PHP 8.4.0 RC4 available for testing

ReflectionMethod::invoke

(PHP 5, PHP 7, PHP 8)

ReflectionMethod::invokeInvoke

Опис

public ReflectionMethod::invoke(?object $object, mixed ...$args): mixed

Invokes a reflected method.

Параметри

object

The object to invoke the method on. For static methods, pass null to this parameter.

args

Zero or more parameters to be passed to the method. It accepts a variable number of parameters which are passed to the method.

Значення, що повертаються

Returns the method result.

Помилки/виключення

A ReflectionException if the object parameter does not contain an instance of the class that this method was declared in.

A ReflectionException if the method invocation failed.

Приклади

Приклад #1 ReflectionMethod::invoke() example

<?php
class HelloWorld {

public function
sayHelloTo($name) {
return
'Hello ' . $name;
}

}

$reflectionMethod = new ReflectionMethod('HelloWorld', 'sayHelloTo');
echo
$reflectionMethod->invoke(new HelloWorld(), 'Mike');
?>

Поданий вище приклад виведе:

Hello Mike

Примітки

Зауваження:

ReflectionMethod::invoke() cannot be used when reference parameters are expected. ReflectionMethod::invokeArgs() has to be used instead (passing references in the argument list).

Прогляньте також

add a note

User Contributed Notes 3 notes

up
21
rojaro at gmail dot com
13 years ago
Note: If you want to invoke protected or private methods, you'll first have to make them accessible using the setAccessible() method (see http://php.net/reflectionmethod.setaccessible ).
up
8
dimitriy at remerov dot ru
12 years ago
This method can be used to call a overwritten public method of a parent class on an child instance
The following code will output "A":

<?php

class A
{
public function
foo()
{
return
__CLASS__;
}
}

class
B extends A
{
public function
foo()
{
return
__CLASS__;
}
}

$b = new B();

$reflection = new ReflectionObject($b);

$parentReflection = $reflection->getParentClass();

$parentFooReflection = $parentReflection->getMethod('foo');

$data = $parentFooReflection->invoke($b);

echo
$data;

?>
up
0
templargrey at wp dot pl
13 years ago
Seems that Reflection doesn`t resolve late static bindings - var_dump will show "string 'a' (length=1)".

<?php
class ParentClass { protected static $a = 'a'; static public function init() { return static::$a; } }
class
ChildClass extends ParentClass { protected static $a = 'b'; }

$r = new ReflectionClass('ChildClass');
var_dump($r->getMethod('init')->invoke(null));
?>
To Top