Files
wordpress-theme-aksrt/inc/classes/class-aksrt-sms-provider-factory.php
T

70 lines
1.9 KiB
PHP

<?php
/**
* AKSRT SMS Provider Factory
*
* 根据 provider key 返回对应的 adapter 实例。
* 内部维护静态注册表,避免重复实例化。
*
* @package AKSRT
*/
defined('ABSPATH') || exit;
class AKSRT_SMS_Provider_Factory {
private static $providers = [];
/**
* 获取供应商 adapter 实例
*/
public static function get(string $key): ?AKSRT_SMS_Provider {
$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;
}
/**
* 获取所有已注册供应商
*
* @return AKSRT_SMS_Provider[]
*/
public static function all(): array {
$keys = ['aliyun', 'tencent', 'huawei', 'custom'];
$result = [];
foreach ($keys as $key) {
$provider = self::get($key);
if ($provider !== null) {
$result[$key] = $provider;
}
}
return $result;
}
/**
* 创建 adapter 实例
*/
private static function create(string $key): ?AKSRT_SMS_Provider {
switch ($key) {
case 'aliyun':
return class_exists('AKSRT_SMS_Provider_Aliyun') ? new AKSRT_SMS_Provider_Aliyun() : null;
case 'tencent':
return class_exists('AKSRT_SMS_Provider_Tencent') ? new AKSRT_SMS_Provider_Tencent() : null;
case 'huawei':
return class_exists('AKSRT_SMS_Provider_Huawei') ? new AKSRT_SMS_Provider_Huawei() : null;
case 'custom':
return class_exists('AKSRT_SMS_Provider_Custom') ? new AKSRT_SMS_Provider_Custom() : null;
default:
return null;
}
}
}