(PHP 8 >= 8.0.23, PHP 8 >= 8.1.11)
ReflectionFunctionAbstract::getClosureCalledClass — Renvoie la classe correspondant à static:: à l'intérieur d'une fermeture
Renvoie la classe en tant que ReflectionClass qui
correspond à static::
à l'intérieur de la
Closure.
Cette fonction ne contient aucun paramètre.
Renvoie une ReflectionClass correspondant à la classe
représentée par static::
dans la Closure.
Si la fonction n'est pas une fermeture ou si elle a une portée globale, null
est renvoyé à la place.
Exemple #1 Exemple illustrant la différence entre ReflectionFunctionAbstract::getClosureCalledClass(), ReflectionFunctionAbstract::getClosureScopeClass(), et ReflectionFunctionAbstract::getClosureThis() avec une méthode d'instance
<?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
?>
L'exemple ci-dessus va afficher :
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" }
Exemple #2 Exemple illustrant la différence entre ReflectionFunctionAbstract::getClosureCalledClass(), ReflectionFunctionAbstract::getClosureScopeClass(), et ReflectionFunctionAbstract::getClosureThis() avec une méthode statique
<?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
?>
L'exemple ci-dessus va afficher :
string(1) "A" string(1) "B" NULL object(ReflectionClass)#4 (1) { ["name"]=> string(1) "A" } object(ReflectionClass)#4 (1) { ["name"]=> string(1) "B" }