PHP 8.6.0 Beta 1 is available for testing

ReflectionFunctionAbstract::getClosureScopeClass

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

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

Описание

public function 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"
}

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

Нашли ошибку?

ИнструкцияИсправлениеСообщение об ошибке
+Добавить

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

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

AltStyle によって変換されたページ (->オリジナル) /