В PHP могут вызываться различные формы, например, объект, массив или строка, содержащая имя функции.
Если я получил такой переменный в переменной, как я могу вывести какое-то удобное для пользователя «определение» в журнале.
Подумайте об этом коде:
call_user_func($callable);
$logger->log("Provided callable " . (string) $callable . " called");
Проблема в том, что возникает ошибка, например ошибка преобразования массива в строку. Каков наилучший способ распечатать что-нибудь полезное об этом вызываемом?
Примерно так должно работать:
function getCallableName(callable $callable) { if (is_string($callable)) { return trim($callable); } else if (is_array($callable)) { if (is_object($callable[0])) { return sprintf("%s::%s", get_class($callable[0]), trim($callable[1])); } else { return sprintf("%s::%s", trim($callable[0]), trim($callable[1])); } } else if ($callable instanceof Closure) { return 'closure'; } else { return 'unknown'; } }
Других решений пока нет …