ReflectionMethod::getClosure
(PHP >= 5.4.0)
ReflectionMethod::getClosure — Возвращает динамически созданное замыкание для метода
Описание
Внимание
К настоящему времени эта функция еще не была документирована; для ознакомления доступен только список аргументов.
Список параметров
-
object
-
Запрещен для статических методов, обязателен для остальных.
Возвращаемые значения
Возвращает замыкание Closure.
Возвращает NULL
в случае ошибки.
- PHP Руководство
- Функции по категориям
- Индекс функций
- Справочник функций
- Расширения, относящиеся к переменным и типам
- Reflection
- Функция ReflectionMethod::__construct() - Конструктор класса ReflectionMethod
- Функция ReflectionMethod::export() - Экспорт отраженного метода
- Функция ReflectionMethod::getClosure() - Возвращает динамически созданное замыкание для метода
- Функция ReflectionMethod::getDeclaringClass() - Получает класс, объявляющий отображенный метод
- Функция ReflectionMethod::getModifiers() - Получает модификаторы метода
- Функция ReflectionMethod::getPrototype() - Получает прототип метода (если такой есть)
- Функция ReflectionMethod::invoke() - Вызов
- Функция ReflectionMethod::invokeArgs() - Вызов метода с передачей аргументов массивом
- Функция ReflectionMethod::isAbstract() - Проверяет, является ли метод абстрактным
- Функция ReflectionMethod::isConstructor() - Проверяет, является ли метод конструктором
- Функция ReflectionMethod::isDestructor() - Проверяет, является ли метод деструктором
- Функция ReflectionMethod::isFinal() - Проверяет, может ли метод иметь наследников (final)
- Функция ReflectionMethod::isPrivate() - Проверяет, является ли метод частным (private)
- Функция ReflectionMethod::isProtected() - Проверяет, является ли метод защищенным (protected)
- Функция ReflectionMethod::isPublic() - Проверяет, является ли метод общедоступным (public)
- Функция ReflectionMethod::isStatic() - Проверяет, является ли метод статическим
- Функция ReflectionMethod::setAccessible() - Делает метод доступным
- Функция ReflectionMethod::__toString() - Возвращает строковое представление объекта Reflection method
Коментарии
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.
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