为什么中间件不实现接口?

Why do Middleware implements no interface?

在 Laravel < 5.2 中,中间件实现了此合约描述的接口:Illuminate\Contracts\Routing\Middleware

现在,用 artisan 创建的中间件不再实现任何东西。 the contract was removed 没有任何解释(除非我弄错了)。

有什么原因吗?

根据 laravel 5.2 升级指南 official documentation 下的弃用部分:

Illuminate\Contracts\Routing\Middleware 合同已被弃用。您的中间件不需要合同。此外,TerminableMiddleware 合同也已弃用。无需实现接口,只需在中间件上定义一个 terminate 方法即可。

我还注意到中间件在其他框架(如 Slim)中没有使用接口,我读到 Relay 也没有使用接口。

the Relay people gave 对他们案例的回答是因为很多中间件接受闭包(即函数而不是 类),这通常不能从 php'从 s 的角度来看,强制使用接口是行不通的。如果没有任何强制接口的实现,那么就没有使用接口的意义。