2012-02-06 6 views
0

У меня есть функция, которая принимает аргумент «обратного вызова». Это может быть либо функция, либо метод статического класса.Проверьте, если аргумент «обратного вызова» является статическим

Как определить, является ли метод статическим или нет?

+0

возможно это поможет: http://stackoverflow.com/questions/1858538/how-do-i-check-in-php-that-im-in-a-static-context-or-not – Alex

+0

Почему это дело? Разумеется, 'call_user_func' делает все, что вам нужно, не беспокоясь о том, что это * kind * от обратного вызова? – lonesomeday

+0

, потому что строка обратного вызова где-то хранится и вызывается в другое время (другой запрос страницы). Я хочу убедиться, что это статический метод – Alex

ответ

2

Я полагаю, вы могли бы сделать это с отражением, хотя это будет slow.

Предположив ваш обратный вызов является $callback:

if (is_array($callback)) { // a function will just be a string 
    $classname = $callback[0]; 
    $methodname = $callback[1]; 

    $method = new ReflectionMethod($classname, $methodname); 

    if ($method->isStatic()) { 
     // method is static 
    } 
} 

Обратите внимание, что это не счетов за время, когда $callback[0] является объектом, или если у вас есть функция лямбды, как $callback, или, возможно, все виды различных обстоятельства. Я не совсем понимаю, что вы ищете; этого может быть достаточно.

Смежные вопросы