``` new C2, 'me' => '__invoke'], ]; class C1 {} class C2 { public function __invoke() {} public function aaa() {} } class SC1 { public static function sc11() {} } foreach ($callables as $callable) { var_dump(resolveCallable($callable)); echo "\n"; } /** * 将可能可执行的内容转换成is_callable可识别的callable * 可识别内容: * 任何is_callable()===true的callable * 任意存在且含有__invoke方法的AnyClass::class * * @param string $callable 可能可执行的内容 * @param bool $return_false 当发生无法转换时,是否返回false,默认返回一个空匿名函数 * @return callable | false */ function resolveCallable($callable, $return_false = false) { if (is_callable($callable)) { return $callable; } elseif (is_string($callable) && class_exists($callable)) { return resolveCallable(new $callable, $return_false); } elseif (is_array($callable) && @$callable[1] === '__invoke') { return resolveCallable(@$callable[0], $return_false); } else { return $return_false ? false : function () {}; } } ```