ReflectionMethod::getClosure

(PHP 5 >= 5.4.0, PHP 7)

ReflectionMethod::getClosureReturns a dynamically created closure for the method

Descrierea

public ReflectionMethod::getClosure ([ object|null $object = null ] ) : Closure

Avertizare

Această funcție nu este documentată în prezent; este disponibilă numai lista sa de argumente.

Parametri

object

Forbidden for static methods, required for other methods.

Valorile întoarse

Returns Closure. Returns null in case of an error.

Istoricul schimbărilor

Versiune Descriere
8.0.0 object is now nullable.
add a note 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
7 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