在查看 Laravel 源代码时,我注意到很多这样的东西:
Controller 类:
class Controller extends BaseController
{
use AuthorizesRequests, AuthorizesResources, DispatchesJobs, ValidatesRequests;
}
它的组成特征之一:
trait AuthorizesRequests {
/**
* Authorize a given action against a set of arguments.
*
* @param mixed $ability
* @param mixed|array $arguments
*
* @return \Illuminate\Auth\Access\Response
*
* @throws \Illuminate\Auth\Access\AuthorizationException
*/
public function authorize($ability, $arguments = []) {
list($ability, $arguments) = $this->parseAbilityAndArguments($ability, $arguments);
return app(Gate::class)->authorize($ability, $arguments);
}
// ...
}
我对此有几个问题:
app()
,在这种情况下)? 我正在考虑在我的代码中使用这种方法在我的几个类之间共享一些通用功能 - 我正在考虑创建一个
ChecksBarcodes
trait,它将与库存信息库一起使用,并在几个相似但不相关的产品管理流程类之间共享该特征,这些类都需要检查条形码。
最佳答案
随 PHP 5.4 引入的 Traits 通常解决了 PHP 的一个大问题:单一继承。我的一个粗略猜测:如果 PHP 支持多重继承(从多个类继承),就不会有特征。
尽管如此,特征是减少代码重复并进一步为多个类提供相同功能的好东西。
关于laravel - 什么是 Laravel 特征模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37965761/