PHP 5.6.0beta1 released

ReflectionMethod::invoke

(PHP 5)

ReflectionMethod::invokeInvoca un método

Descripción

public mixed ReflectionMethod::invoke ( object $object [, mixed $parameter [, mixed $... ]] )

Invoca al método reflexionado.

Parámetros

object

Objeto al que pertenece el método invocado. En métodos estáticos, se podrá introducir null en este parámetro.

parameter

Cero o más parámetros para pasar a este método. Acepta un número variable de parámetros, que se pasarán al método.

Valores devueltos

Devuelve el resultado del método.

Errores/Excepciones

Lanza ReflectionException si el parámetro object no contiene una instancia de la clase en la que se declaró este método.

Lanza ReflectionException si fallara la invocación al método.

Ejemplos

Ejemplo #1 Ejemplo de ReflectionMethod::invoke()

<?php
class HolaMundo {

    public function 
saludarA($nombre) {
        return 
'Hola ' $nombre;
    }

}

$metodoReflexionado = new ReflectionMethod('HolaMundo''saludarA');
echo 
$metodoReflexionado->invoke(new HolaMundo(), 'Miguel');
?>

El resultado del ejemplo sería:

Hola Miguel

Notas

Nota:

Si la función tiene argumentos que necesitan ser referencias, éstos deben ser referencias en la lista de argumentos pasados.

Ver también

add a note add a note

User Contributed Notes 3 notes

up
0
dimitriy at remerov dot ru
1 year 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
2 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));
?>
up
0
rojaro at gmail dot com
3 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 ).
To Top