在 PHP 中打印可调用的名称或定义

Edg*_*rPE 5 php callable

PHP 中的可调用对象可以采用多种形式,例如对象、数组或包含函数名称的字符串。

如果我在变量中得到这样的可调用对象,如何在日志中打印一些用户友好的“定义”。

想想这段代码:

call_user_func($callable);
$logger->log("Provided callable " . (string) $callable . " called");
Run Code Online (Sandbox Code Playgroud)

问题是,这会引发错误,例如数组到字符串的转换错误。打印出有关该可调用内容的有用信息的最佳方法是什么?

Seb*_*Seb 2

像这样的东西应该有效:

function getCallableName($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';
    }
}
Run Code Online (Sandbox Code Playgroud)