Как я могу узнать имя класса объекта, с которым связано замыкание?

У меня есть какой-то сторонний код, который создает замыкание, которое впоследствии связывается с объектом.
Print_r на объекте замыкания дает это:

Closure Object ( [this] => am4Widgets Object ( ) )

Теперь мне нужно получить «instanceof» связанного объекта (в данном случае «am4Widgets»), какой-то псевдокод, например

print_r(myClosureObject instanceofboundobject am4Widgets);

который должен вывести «TRUE».

Я искал php.net, но безрезультатно.

Заранее спасибо за любую идею / предложение.

ОБНОВИТЬ:

Вот где создается замыкание (фрагмент кода, который я не могу изменить):

function initActions()
{
parent::initActions();
.
.
.
add_action('wp_head', function(){
$ajax_url =  admin_url( 'admin-ajax.php' );
echo <<<CUT
<script>...some javascript code...</script>
CUT;
});
}

На самом деле я пытаюсь отцепить закрытие от wp_head, потому что оно мне нужно в нижнем колонтитуле.

Я использую глобальный wordpress ‘$ wp_filters для доступа ко всем зарегистрированным хукам, но теперь мне нужен способ уникальной идентификации замыкания, которое я хочу отцепить, что может быть простой задачей, если есть способ получить доступ к связанному объекту замыкания.

1

Решение

Ты можешь использовать ReflectionFunction объект для этой цели.

class A {}

$closure = (function () {
echo '$this class from closure: ' . get_class($this) . "\n";
})->bindTo(new A());

$closure();

$fn = new ReflectionFunction($closure);
echo '$this class from reflection: ' . get_class($fn->getClosureThis());

Выход:

$this from closure: A
$this from reflection: A
2

Другие решения

Других решений пока нет …