PHP中的Callable可以有很多形式,比如对象,数组或包含函数名的字符串。
如果我在变量中得到这样的可调用,我怎样才能在日志中打印一些用户友好的“定义”。
想想这段代码:
call_user_func($callable);
$logger->log("Provided callable " . (string) $callable . " called");
问题是,这会引发错误,例如数组到字符串转换错误。打印出有关可调用内容的最佳方法是什么?
这样的事情应该有效:
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'; } }