48 lines
1.2 KiB
PHP
48 lines
1.2 KiB
PHP
<?php
|
|
/**
|
|
* @package AKSRT
|
|
*/
|
|
|
|
namespace AKSRT\Sms;
|
|
|
|
defined('ABSPATH') || exit;
|
|
|
|
class SMSProviderFactory {
|
|
|
|
private static $providers = [];
|
|
|
|
/**
|
|
* 获取供应商 adapter 实例
|
|
*/
|
|
public static function get(string $key): ?ProviderInterface {
|
|
$key = sanitize_key($key);
|
|
if ($key === '') return null;
|
|
|
|
if (isset(self::$providers[$key])) {
|
|
return self::$providers[$key];
|
|
}
|
|
|
|
$instance = self::create($key);
|
|
if ($instance !== null) {
|
|
self::$providers[$key] = $instance;
|
|
}
|
|
return $instance;
|
|
}
|
|
|
|
/**
|
|
* 创建 adapter 实例
|
|
*/
|
|
private static function create(string $key): ?ProviderInterface {
|
|
switch ($key) {
|
|
case 'ali':
|
|
return class_exists('AKSRT\\Sms\\SMSProviderAliyun') ? new SMSProviderAliyun() : null;
|
|
case 'tencent':
|
|
return class_exists('AKSRT\\Sms\\SMSProviderTencent') ? new SMSProviderTencent() : null;
|
|
case 'smsbao':
|
|
return class_exists('AKSRT\\Sms\\SMSProviderSmsbao') ? new SMSProviderSmsbao() : null;
|
|
default:
|
|
return null;
|
|
}
|
|
}
|
|
}
|