(PHP 5 >= 5.4.0, PHP 7, PHP 8)
ReflectionFunctionAbstract::getClosureScopeClass — Devuelve la clase correspondiente al contexto interno de una función anónima
Devuelve la clase en forma de ReflectionClass que corresponde al contexto interno de la Closure.
Esta función no contiene ningún parámetro.
Devuelve una ReflectionClass correspondiente a la clase
cuyo contexto se utiliza dentro de la Closure.
Si la función no es una función anónima o si tiene un contexto global,
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" }