ReflectionMethod::invoke

(PHP 5, PHP 7, PHP 8)

ReflectionMethod::invokeInvoca

Descrição

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

Invoca um método refletido.

Parâmetros

object

O objeto no qual invocar o método. Para métodos estáticos, passe null para este parâmetro.

args

Zero ou mais parâmetros a serem passados ​​para o método. Ele aceita um número variável de parâmetros que são passados ​​para o método.

Valor Retornado

Retorna o resultado do método.

Erros/Exceções

Um ReflectionException se o parâmetro object não contém uma instância da classe na qual este método foi declarado.

Um ReflectionException se a invocação do método falhou.

Exemplos

Exemplo #1 Exemplo de ReflectionMethod::invoke()

<?php
class HelloWorld {

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

}

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

O exemplo acima produzirá:

Hello Mike

Notas

Nota:

ReflectionMethod::invoke() não pode ser usado quando parâmetros de referência são esperados. ReflectionMethod::invokeArgs() deve ser usado (passando referências na lista de argumentos).

Veja Também

adicione uma nota

Notas Enviadas por Usuários (em inglês) 3 notes

up
21
rojaro at gmail dot com
14 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
13 years ago
This method can be used to call a overwritten public method of a parent class on an child instanceThe following code will output "A":<?phpclass 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
14 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