(PHP 5 >= 5.4.0, PHP 7, PHP 8)
ReflectionFunctionAbstract::getClosureScopeClass — Retourne la classe correspondant au contexte interne d'une fermeture
Retourne la classe sous forme de ReflectionClass qui correspond au contexte interne de la Closure.
Cette fonction ne contient aucun paramètre.
Retourne une ReflectionClass correspondant à la classe
dont le contexte est utilisé à l'intérieur de la Closure.
Si la fonction n'est pas une closure ou si elle a un contexte global,
null
est renvoyé à la place.
Exemple #1 Exemple illustrant la différence entre ReflectionFunctionAbstract::getClosureCalledClass(), ReflectionFunctionAbstract::getClosureScopeClass(), et ReflectionFunctionAbstract::getClosureThis() avec une fermeture dans le contexte de l'objet
<?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, car une fermeture non statique prend le contexte de l'objet
var_dump($r->getClosureScopeClass()); // Correspond à la résolution de self::class à l'intérieur d'une fermeture
var_dump($r->getClosureCalledClass()); // Correspond à la résolution de static::class à l'intérieur d'une fermeture
?>
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 fermeture statique sans contexte d'objet
<?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, car la pseudo-variable $this n'est pas disponible dans un contexte statique
var_dump($r->getClosureScopeClass()); // Correspond à la résolution de self::class à l'intérieur d'une fermeture
var_dump($r->getClosureCalledClass()); // Correspond à la résolution de static::class à l'intérieur d'une fermeture
?>
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" }