(PHP 5 >= 5.4.0, PHP 7, PHP 8)
ReflectionFunctionAbstract::getClosureThis — Devuelve el objeto que corresponde a $this dentro de una closure
Si la función es una closure no estática, recupera el objeto vinculado a $this dentro de la closure.
Esta función no contiene ningún parámetro.
Devuelve la instancia de objeto representada por $this dentro
de la Closure.
Si la función no es una closure o si no tiene un $this,
null
es devuelto en su lugar.
Ejemplo #1 Ejemplo que ilustra la diferencia entre ReflectionFunctionAbstract::getClosureCalledClass(), ReflectionFunctionAbstract::getClosureScopeClass(), y ReflectionFunctionAbstract::getClosureThis() con una función anónima en el contexto del objeto
<?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, ya que una función anónima no estática toma el contexto del objeto
var_dump($r->getClosureScopeClass()); // Corresponde a la resolución de self::class dentro de una función anónima
var_dump($r->getClosureCalledClass()); // Corresponde a la resolución de static::class dentro de una función anónima
?>
El ejemplo anterior mostrará :
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" }
Ejemplo #2 Ejemplo que ilustra la diferencia entre ReflectionFunctionAbstract::getClosureCalledClass(), ReflectionFunctionAbstract::getClosureScopeClass(), y ReflectionFunctionAbstract::getClosureThis() con una función anónima estática sin contexto de objeto
<?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, ya que la pseudo-variable $this no está disponible en un contexto estático
var_dump($r->getClosureScopeClass()); // Corresponde a la resolución de self::class dentro de una función anónima
var_dump($r->getClosureCalledClass()); // Corresponde a la resolución de static::class dentro de una función anónima
?>
El ejemplo anterior mostrará :
string(1) "A" string(1) "B" NULL object(ReflectionClass)#4 (1) { ["name"]=> string(1) "A" } object(ReflectionClass)#4 (1) { ["name"]=> string(1) "B" }