(PHP 8 >= 8.0.23, PHP 8 >= 8.1.11)
ReflectionFunctionAbstract::getClosureCalledClass — Returns the class corresponding to static:: inside a closure
Returns the class as a ReflectionClass that
corresponds to resolving the class name corresponding to static::
inside the
Closure.
This function has no parameters.
Returns a ReflectionClass corresponding to the class
represented by static::
in the Closure.
If the function is not a closure or if it has global scope null
is returned instead.
Example #1 Example showcasing difference between ReflectionFunctionAbstract::getClosureCalledClass(), ReflectionFunctionAbstract::getClosureScopeClass(), and ReflectionFunctionAbstract::getClosureThis() with a closure in the object context
<?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, since a non-static closure take the object context
var_dump($r->getClosureScopeClass()); / Corresponds to the self::class resolution inside a closure
var_dump($r->getClosureCalledClass()); / Corresponds to the static::class resolution inside a closure
?>
The above example will output:
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" }
Example #2 Example showcasing difference between ReflectionFunctionAbstract::getClosureCalledClass(), ReflectionFunctionAbstract::getClosureScopeClass(), and ReflectionFunctionAbstract::getClosureThis() with a static closure without an object context
<?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, since the pseudo-variable $this is not available in a static context
var_dump($r->getClosureScopeClass()); / Corresponds to the self::class resolution inside a closure
var_dump($r->getClosureCalledClass()); / Corresponds to the static::class resolution inside a closure
?>
The above example will output:
string(1) "A" string(1) "B" NULL object(ReflectionClass)#4 (1) { ["name"]=> string(1) "A" } object(ReflectionClass)#4 (1) { ["name"]=> string(1) "B" }
Follow Lee on X/Twitter - Father, Husband, Serial builder creating AI, crypto, games & web tools. We are friends :) AI Will Come To Life!
Check out: eBank.nz (Art Generator) |
Netwrck.com (AI Tools) |
Text-Generator.io (AI API) |
BitBank.nz (Crypto AI) |
ReadingTime (Kids Reading) |
RewordGame |
BigMultiplayerChess |
WebFiddle |
How.nz |
Helix AI Assistant