<?php
$fn = function () { return get_called_class(); };
var_dump((new ReflectionFunction($fn))->getClosureScopeClass());
class C {
private static $test = 'In class C';
public function __construct() {
$fn = function () { return get_called_class(); };
$res = (new ReflectionFunction($fn))->getClosureScopeClass();
var_dump(get_class($res));
var_dump($res->getName());
}
public static function s_fn() {
$fn = function () { var_dump(D::$test); return get_called_class(); };
$res = (new ReflectionFunction($fn))->getClosureScopeClass();
var_dump(get_class($res));
var_dump($res->getName());
return $fn;
}
}
class D extends C {
private static $test = 'In class D';
public function __construct() {
static::s_fn();
}
public static function test() { return static::s_fn(); }
}
$d = new D;
$func = D::test();
var_dump($func());