ReflectionFunctionAbstract::getClosureCalledClass

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

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

Описание

public 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
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