在Laravel中使用静态方法的Facades与Class

在Laravel中使用静态方法的Facades与Class,laravel,class,static,package,facade,Laravel,Class,Static,Package,Facade,我环顾了一下Laravel框架和他们的一些产品,我注意到Cashier使用的是静态方法的Casheir类,而Socialite则用作facade 以这种或那种方式构建它有什么好处/坏处,或者根本没有好处/坏处? 我想自己构建一些东西,但如果将其构建为facade是一个更好的解决方案,我不想开始使用静态方法将其构建为类。当您可能需要多个实现时,可以通过facade定义一个接口来简化代码 使用静态方法将其构建为类: 当您有多个类时,您必须执行以下操作: CashierOne::method, Cas

我环顾了一下Laravel框架和他们的一些产品,我注意到Cashier使用的是静态方法的Casheir类,而Socialite则用作facade

以这种或那种方式构建它有什么好处/坏处,或者根本没有好处/坏处?
我想自己构建一些东西,但如果将其构建为facade是一个更好的解决方案,我不想开始使用静态方法将其构建为类。

当您可能需要多个实现时,可以通过facade定义一个接口来简化代码

使用静态方法将其构建为类:

当您有多个类时,您必须执行以下操作:

CashierOne::method, CashierTwo::method ....
用作门面:

根据绑定到容器的内容切换实现 您只需通过接口调用:

// Define a Cashier Facade
class Cashier extends Facade
{
    /**
     * Get the registered name of the component.
     *
     * @return string
     */
    protected static function getFacadeAccessor()
    {
        return 'cashier';
    }
}

// In CashServiceProvider
$this->app->singleton('cashier', function ($app) {
    return new CashierManager ($app);
});

// In CashierManager
public function gateway($name = null)
{
    // get cashier implementation by name
}

public function __call($method, $parameters)
{
    return $this->gateway()->$method(...$parameters);
}

// In Controller
Cashier::method
此外,外观更易于测试,检查: