(PHP 5 >= 5.4.0, PHP 7, PHP 8)
ReflectionFunctionAbstract::getClosureThis — 返回对应于闭包内 $this 的对象
此函数没有参数。
示例 #1 演示 ReflectionFunctionAbstract::getClosureCalledClass()、ReflectionFunctionAbstract::getClosureScopeClass() 和 ReflectionFunctionAbstract::getClosureThis() 在对象上下文中使用闭包时的区别
<?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,因为非静态闭包采用对象上下文
var_dump($r->getClosureScopeClass()); // 对应于闭包内的 self::class 解析
var_dump($r->getClosureCalledClass()); // 对应于闭包内的 static::class 解析
?>
以上示例将输出
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" }
示例 #2 演示 ReflectionFunctionAbstract::getClosureCalledClass()、ReflectionFunctionAbstract::getClosureScopeClass() 和 ReflectionFunctionAbstract::getClosureThis() 在没有对象上下文的静态闭包中的区别
<?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,因为伪变量 $this 在静态上下文中不可用
var_dump($r->getClosureScopeClass()); // 对应于闭包内的 self::class 解析
var_dump($r->getClosureCalledClass()); // 对应于闭包内的 static::class 解析
?>
以上示例将输出
string(1) "A" string(1) "B" NULL object(ReflectionClass)#4 (1) { ["name"]=> string(1) "A" } object(ReflectionClass)#4 (1) { ["name"]=> string(1) "B" }