Возвращает класс, который соответствует разрешению static:: внутри замыкания

# ReflectionFunctionAbstract::getClosureCalledClass

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

ReflectionFunctionAbstract::getClosureCalledClass — Возвращает класс, который соответствует разрешению static:: внутри замыкания

### Описание

public function ReflectionFunctionAbstract::getClosureCalledClass(): ?ReflectionClass

Метод возвращает объект рефлексии ReflectionClass для класса, который соответствует статическому разрешению названия класса — `static::` внутри объекта Closure.

### Список параметров

Сигнатура функции не содержит параметров.

### Возвращаемые значения

Метод возвращает объект рефлексии класса — ReflectionClass, который соответствует представлению `static::` внутри объекта Closure. Метод вернёт `null` вместо объекта рефлексии класса, если функция не принадлежит типу замыкания или ограничивается глобальной областью видимости.

### Примеры

Пример #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"
    }

### Смотрите также

- ReflectionFunctionAbstract::getClosureScopeClass() - Возвращает класс, который соответствует области видимости внутри замыкания
- ReflectionFunctionAbstract::getClosureThis() - Возвращает объект, который соответствует псевдопеременной $this внутри замыкания
- Позднее статическое связывание

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