PHP Conference Nagoya 2025

ReflectionFunctionAbstract::getClosureScopeClass

(PHP 5 >= 5.4.0, PHP 7, PHP 8)

ReflectionFunctionAbstract::getClosureScopeClassВозвращает класс, который соответствует области видимости внутри замыкания

Описание

public ReflectionFunctionAbstract::getClosureScopeClass(): ?ReflectionClass

Метод возвращает объект рефлексии ReflectionClass для класса, который соответствует области видимости внутри замыкания Closure.

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

У этой функции нет параметров.

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

Метод возвращает объект рефлексии класса — ReflectionClass, который соответствует классу, областью видимости которого ограничиваются переменные внутри замыкания 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"
}

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

Добавить

Примечания пользователей

Пользователи ещё не добавляли примечания для страницы
To Top