Php Laravel-如何通过公开泛型类来抽象底层逻辑

Php Laravel-如何通过公开泛型类来抽象底层逻辑,php,laravel-5,Php,Laravel 5,我正在尝试为我的应用程序构建一个良好的构建块,以避免供应商锁定。这是Laravel 5.4,下面是我需要帮助的场景: 我想实现短信发送,但我不想被锁定到一个单一的供应商 从概念上讲,在代码中,我会这样做: use App/SMS; // controller public function send_sms() { SMS::send('Thanks for saving', $number); } 然而,SMS只是一个抽象,它将调用一个实际实现的类函数,我可能有很多,例如在配置

我正在尝试为我的应用程序构建一个良好的构建块,以避免供应商锁定。这是Laravel 5.4,下面是我需要帮助的场景:

我想实现短信发送,但我不想被锁定到一个单一的供应商

从概念上讲,在代码中,我会这样做:

use App/SMS;

// controller

public function send_sms() 
{
    SMS::send('Thanks for saving', $number);
}
然而,SMS只是一个抽象,它将调用一个实际实现的类函数,我可能有很多,例如在配置文件中切换

class SMSGlobal implements SMSProvider 
{
    public function send($msg, $to)
    {
        // Whatever the logic here is for SMSGlobal to send an SMS.
    }
}

class Nexmo implements SMSProvider 
{
    public function send($msg, $to)
    {
        // Whatever the logic here is for Nexmo to send an SMS.
    }
}


// Somewhere else, I would set SMS to a particular provider (in config)?

'SMSProvider' => 'SMSGlobal'
我希望这是有道理的。我只是不确定如何实现这种类型的东西——从概念上讲,它是有意义的(在我的头脑中)

我会有很多这样的抽象,所以系统不会被供应商锁定

这类似于缓存的工作方式,在配置中设置“redis”,然后调用Cache::get()使用redis提供程序,但作为程序员,后端是数据库/文件还是redis没有区别

干杯

仅供参考-这里也有问题


但不确定社区的规模。

听起来你在描述如何创建和传递一个绑定到实现类的社区。在Laravel中,您可以将接口与实现类绑定,如上的文档所述