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

# ReflectionFunctionAbstract::getClosureCalledClass

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

ReflectionFunctionAbstract::getClosureCalledClass — Devuelve la clase correspondiente a static:: dentro de una función anónima

### Descripción

public function 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 contiene ningún parámetro.

### 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 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"
    }

### Ver también

- ReflectionFunctionAbstract::getClosureScopeClass() - Devuelve la clase correspondiente al contexto interno de una función anónima
- ReflectionFunctionAbstract::getClosureThis() - Devuelve el objeto que corresponde a $this dentro de una closure
- Late Static Bindings (Resolución estática en tiempo de ejecución)

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open