PHP 8.4.6 Released!

ReflectionFunctionAbstract::getClosureCalledClass

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

ReflectionFunctionAbstract::getClosureCalledClassRetorna a classe correspondente a static:: dentro de uma closure

Descrição

public ReflectionFunctionAbstract::getClosureCalledClass(): ?ReflectionClass

Retorna a classe como uma ReflectionClass que corresponde a resolver o nome de classe associado a static:: dentro da Closure.

Parâmetros

Esta função não possui parâmetros.

Valor Retornado

Retorna uma ReflectionClass que corresponde à classe representada por static:: na Closure. Se a função não é uma closure ou se ela tiver escopo global, null é retornado.

Exemplos

Exemplo #1 Exemplo que mostra a diferença entre ReflectionFunctionAbstract::getClosureCalledClass(), ReflectionFunctionAbstract::getClosureScopeClass(), e ReflectionFunctionAbstract::getClosureThis() com uma closure no contexto de objeto

<?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, já que uma closure não estática toma o contexto de objeto
var_dump($r->getClosureScopeClass()); // Corresponde a resolver self::class dentro de uma closure
var_dump($r->getClosureCalledClass()); // Corresponde a resolver static::class dentro de uma closure

?>

O exemplo acima produzirá:

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

Exemplo #2 Exemplo que mostra a diferença entre ReflectionFunctionAbstract::getClosureCalledClass(), ReflectionFunctionAbstract::getClosureScopeClass(), e ReflectionFunctionAbstract::getClosureThis() com uma closure estática sem um contexto de objeto

<?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, já que a pseudo-variável $this não está disponível no contexto estático
var_dump($r->getClosureScopeClass()); // Corresponde a resolver self::class dentro de uma closure
var_dump($r->getClosureCalledClass()); // Corresponde a resolver static::class dentro de uma closure

?>

O exemplo acima produzirá:

string(1) "A"
string(1) "B"
NULL
object(ReflectionClass)#4 (1) {
  ["name"]=>
  string(1) "A"
}
object(ReflectionClass)#4 (1) {
  ["name"]=>
  string(1) "B"
}

Veja Também

adicione uma nota

Notas Enviadas por Usuários (em inglês)

Não há notas de usuários para esta página.
To Top