一个困扰我很久的小问题,求圣主们解答

一直都没在意这个小问题 能用就行,但是总见到我就想弄明白了
为什么很多的类里面都有个
public function handle($request, Closure $next) {}
这种函数呢,是自动调用?没见手动调用的地方啊。中间件 也是这么写 好多地方直接写 这个 函数 没看见 调用的 Yii 里面也有 接口文档里面也有 。
有人能详细的说一下嘛

做自己
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 4
DukeAnn

handle 这个函数名

8年前 评论

就是为了方便 foreach 使用而已,刚好这个名称也比较容易理解。假如三个类都定义了 handle 方法,那是不是可以直接调用这个方法就行了?

$classes = [
    'AClass',
    'BClass',
    'CClass'
];

foreach($classes as $class){
    return (new $class)->handle();
}

下面的代码是事件 Dispatcher 的一个方法,如果你在定义监听器的时候没有定义call 方法,默认会用 handle方法。

protected function parseClassCallable($listener)
{
    $segments = explode('@', $listener);

    return [$segments[0], count($segments) == 2 ? $segments[1] : 'handle'];
}
8年前 评论

名称只不过是个约定,调用肯定是调用了的。

就拿middleware来说,定义了middleware,那我就调用你的handle方法来决定是继续处理请求还是直接返回。这个约定的名称handle在Illuminate\Pipeline\Pipeline这个类的$method属性中定义。调用也是在这个类中调用的。

8年前 评论
DukeAnn

@eddy8
@oustn 谢谢啦

8年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!