Напечатайте имя или определение вызываемого в переполнении стека

В PHP могут вызываться различные формы, например, объект, массив или строка, содержащая имя функции.

Если я получил такой переменный в переменной, как я могу вывести какое-то удобное для пользователя «определение» в журнале.

Подумайте об этом коде:

call_user_func($callable);
$logger->log("Provided callable " . (string) $callable . " called");

Проблема в том, что возникает ошибка, например ошибка преобразования массива в строку. Каков наилучший способ распечатать что-нибудь полезное об этом вызываемом?

1

Решение

Примерно так должно работать:

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';
}
}
1

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

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