mirror of
https://gitee.com/fastadminnet/framework.git
synced 2026-07-06 15:02:47 +08:00
改进Hook类exec方法支持指定类的方法执行 包括静态方法
This commit is contained in:
@@ -13,6 +13,7 @@ namespace think;
|
|||||||
|
|
||||||
use think\App;
|
use think\App;
|
||||||
use think\Debug;
|
use think\Debug;
|
||||||
|
use think\Loader;
|
||||||
use think\Log;
|
use think\Log;
|
||||||
|
|
||||||
class Hook
|
class Hook
|
||||||
@@ -111,15 +112,23 @@ class Hook
|
|||||||
public static function exec($class, $tag = '', &$params = null, $extra = null)
|
public static function exec($class, $tag = '', &$params = null, $extra = null)
|
||||||
{
|
{
|
||||||
App::$debug && Debug::remark('behavior_start', 'time');
|
App::$debug && Debug::remark('behavior_start', 'time');
|
||||||
if (is_callable($class)) {
|
$method = Loader::parseName($tag, 1, false);
|
||||||
|
if ($class instanceof \Closure) {
|
||||||
$result = call_user_func_array($class, [ & $params, $extra]);
|
$result = call_user_func_array($class, [ & $params, $extra]);
|
||||||
$class = 'Closure';
|
$class = 'Closure';
|
||||||
|
} elseif (is_array($class)) {
|
||||||
|
list($class, $method) = $class;
|
||||||
|
|
||||||
|
$result = (new $class())->$method($params, $extra);
|
||||||
|
$class = $class . '->' . $method;
|
||||||
} elseif (is_object($class)) {
|
} elseif (is_object($class)) {
|
||||||
$result = $class->$tag($params, $extra);
|
$result = $class->$method($params, $extra);
|
||||||
$class = get_class($class);
|
$class = get_class($class);
|
||||||
|
} elseif (strpos($class, '::')) {
|
||||||
|
$result = call_user_func_array($class, [ & $params, $extra]);
|
||||||
} else {
|
} else {
|
||||||
$obj = new $class();
|
$obj = new $class();
|
||||||
$method = ($tag && is_callable([$obj, $tag])) ? $tag : 'run';
|
$method = ($tag && is_callable([$obj, $method])) ? $method : 'run';
|
||||||
$result = $obj->$method($params, $extra);
|
$result = $obj->$method($params, $extra);
|
||||||
}
|
}
|
||||||
if (App::$debug) {
|
if (App::$debug) {
|
||||||
|
|||||||
Reference in New Issue
Block a user