PHP Conference Nagoya 2025

ReflectionMethod::getClosure

(PHP 5 >= 5.4.0, PHP 7, PHP 8)

ReflectionMethod::getClosureDevuelve un cierre creado dinámicamente para este método

Descripción

public ReflectionMethod::getClosure(object $object): Closure

Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

object

No permitido en métodos estáticos. Obligatorio para el resto de métodos.

Valores devueltos

Devuelve un objeto Closure. En caso de error, devuelve null.

add a note

User Contributed Notes 2 notes

up
14
Denis Doronin
11 years ago
You can call private methods with getClosure():

<?php

function call_private_method($object, $method, $args = array()) {
$reflection = new ReflectionClass(get_class($object));
$closure = $reflection->getMethod($method)->getClosure($object);
return
call_user_func_array($closure, $args);
}

class
Example {

private
$x = 1, $y = 10;

private function
sum() {
print
$this->x + $this->y;
}

}

call_private_method(new Example(), 'sum');

?>

Output is 11.
up
-1
okto
8 years ago
Use method from another class context.

<?php

class A {
private
$var = 'class A';

public function
getVar() {
return
$this->var;
}

public function
getCl() {
return function () {
$this->getVar();
};
}
}

class
B {
private
$var = 'class B';
}

$a = new A();
$b = new B();

print
$a->getVar() . PHP_EOL;

$reflection = new ReflectionClass(get_class($a));
$closure = $reflection->getMethod('getVar')->getClosure($a);
$get_var_b = $closure->bindTo($b, $b);

print
$get_var_b() . PHP_EOL;

// Output:
// class A
// class B
To Top