(PHP 8 >= 8.0.23, PHP 8 >= 8.1.11)
ReflectionFunctionAbstract::getClosureCalledClass — Возвращает класс, соответствующий static:: внутри замыкания
Возвращает класс в виде 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
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" }