ReflectionFunctionAbstract::getClosureCalledClass

(PHP 8 >= 8.0.23, PHP 8 >= 8.1.11)

ReflectionFunctionAbstract::getClosureCalledClassDevuelve la clase correspondiente a static:: dentro de una función anónima

Descripción

public ReflectionFunctionAbstract::getClosureCalledClass(): ?ReflectionClass

Devuelve la clase como ReflectionClass que corresponde a la resolución del nombre de clase correspondiente a static:: dentro de la Closure.

Parámetros

Esta función no tiene parámetros.

Valores devueltos

Devuelve una ReflectionClass correspondiente a la clase representada por static:: en la Closure. Si la función no es una función anónima o si tiene un ámbito global, null es devuelto en su lugar.

Ejemplos

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 resultado del ejemplo sería:

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 resultado del ejemplo sería:

string(1) "A"
string(1) "B"
NULL
object(ReflectionClass)#4 (1) {
  ["name"]=>
  string(1) "A"
}
object(ReflectionClass)#4 (1) {
  ["name"]=>
  string(1) "B"
}

Ver también

add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top