2017-01-12 16 views
1

У меня есть сторонний код, который создает замыкание, которое впоследствии привязывается к объекту. print_r на объекте закрытия дает следующее:Как узнать имя класса объекта, к которому привязано ограничение?

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

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

print_r(myClosureObject instanceofboundobject am4Widgets); 

, который должен выводить «ИСТИНА».

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

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

UPDATE:

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

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 для доступа ко всем зарегистрированным крючкам, но теперь мне нужен способ однозначно идентифицировать закрытие, которое я хочу отцепить, что может быть легкой задачей, если бы был способ получить доступ к связанный объект закрытия.

+0

Как вы определяете «Закрытие объекта»? –

+0

проверить это: http://wordpress.stackexchange.com/questions/137688/remove-actions-filters-added-via-anonymous-functions – yivi

+0

@German Lashevich «Закрытие», в данном случае, построено wordpress ' базовую структуру в блоке functio() {} ", переданном функции add_action() в качестве второго параметра. –

ответ

2

Для этого вы можете использовать объект 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 
+0

Бинго !!! Точно, что я был после. Большое спасибо, немецкий. –