PHP Conference Japan 2024

ReflectionFunctionAbstract::getClosureScopeClass

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

ReflectionFunctionAbstract::getClosureScopeClassRetourne la classe correspondant au contexte interne d'une fermeture

Description

public ReflectionFunctionAbstract::getClosureScopeClass(): ?ReflectionClass

Retourne la classe sous forme de ReflectionClass qui correspond au contexte interne de la Closure.

Liste de paramètres

Cette fonction ne contient aucun paramètre.

Valeurs de retour

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.

Exemples

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

Voir aussi

add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top