Renvoie la classe correspondant à static:: à l'intérieur d'une fermeture

# ReflectionFunctionAbstract::getClosureCalledClass

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

ReflectionFunctionAbstract::getClosureCalledClass — Renvoie la classe correspondant à static:: à l'intérieur d'une fermeture

### Description

public function ReflectionFunctionAbstract::getClosureCalledClass(): ?ReflectionClass

Renvoie la classe en tant que ReflectionClass qui correspond à la résolution du nom de la classe correspondant à `static::` à l'intérieur de la Closure.

### Liste de paramètres

Cette fonction ne contient aucun paramètre.

### Valeurs de retour

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.

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

- ReflectionFunctionAbstract::getClosureScopeClass() - Retourne la classe correspondant au contexte interne d'une fermeture
- ReflectionFunctionAbstract::getClosureThis() - Retourne l'objet qui correspond à $this à l'intérieur d'une closure
- Late Static Bindings (Résolution statique à la volée)

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open