(PHP 5 >= 5.4.0, PHP 7, PHP 8)
ReflectionFunctionAbstract::getClosureThis — Возвращает объект, который соответствует псевдопеременной $this внутри замыкания
Метод получает объект, который связывается с псевдопеременной $this внутри замыкания, если функцию объявили как нестатическое замыкание.
У этой функции нет параметров.
Метод возвращает экземпляр объекта, который представляет псевдопеременная $this
внутри замыкания Closure.
Метод вернёт null
вместо объекта класса,
если функция не принадлежит типу замыкания или внутри замыкания недоступна переменная $this.
Пример #1 Пример разницы в значениях возврата методов ReflectionFunctionAbstract::getClosureCalledClass(), ReflectionFunctionAbstract::getClosureScopeClass() и ReflectionFunctionAbstract::getClosureThis() при отражении замыкания, которому доступен контекст объекта
<?php
class A
{
public function getClosure()
{
var_dump(self::class, static::class);
return function() {};
}
}
class B extends A {}
$b = new B();
$c = $b->getClosure();
$r = new ReflectionFunction($c);
var_dump($r->getClosureThis()); // Выводит $this === $b, поскольку нестатическое замыкание захватывает контекст объекта
var_dump($r->getClosureScopeClass()); // Соответствует разрешению self::class внутри замыкания
var_dump($r->getClosureCalledClass()); // Соответствует разрешению static::class внутри замыкания
?>
Результат выполнения приведённого примера:
string(1) "A" string(1) "B" object(B)#1 (0) { } object(ReflectionClass)#4 (1) { ["name"]=> string(1) "A" } object(ReflectionClass)#4 (1) { ["name"]=> string(1) "B" }
Пример #2 Пример разницы в значениях возврата методов ReflectionFunctionAbstract::getClosureCalledClass(), ReflectionFunctionAbstract::getClosureScopeClass() и ReflectionFunctionAbstract::getClosureThis() при отражении статического замыкания без доступа к контексту объекта
<?php
class A
{
public function getClosure()
{
var_dump(self::class, static::class);
return static function() {};
}
}
class B extends A {}
$b = new B();
$c = $b->getClosure();
$r = new ReflectionFunction($c);
var_dump($r->getClosureThis()); // Выводит NULL, поскольку псевдопеременная $this недоступна в статическом контексте
var_dump($r->getClosureScopeClass()); // Соответствует разрешению self::class внутри замыкания
var_dump($r->getClosureCalledClass()); // Соответствует разрешению static::class внутри замыкания
?>
Результат выполнения приведённого примера:
string(1) "A" string(1) "B" NULL object(ReflectionClass)#4 (1) { ["name"]=> string(1) "A" } object(ReflectionClass)#4 (1) { ["name"]=> string(1) "B" }