SmmService.php 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. <?php
  2. namespace App\Services;
  3. use App\Services\Contracts\SmmPlatformInterface;
  4. use InvalidArgumentException;
  5. class SmmService
  6. {
  7. protected SmmPlatformInterface $platform;
  8. protected $configData = [];
  9. public function __construct(string $platform,array $configData = [])
  10. {
  11. $this->configData = $configData;
  12. $this->platform = $this->resolvePlatform($platform);
  13. }
  14. protected function resolvePlatform(string $platform): SmmPlatformInterface
  15. {
  16. $className = $this->getPlatformClassName($platform);
  17. if (!class_exists($className)) {
  18. throw new InvalidArgumentException("Platform [{$platform}] not supported");
  19. }
  20. $instance = new $className($this->configData);
  21. if (!$instance instanceof SmmPlatformInterface) {
  22. throw new \RuntimeException("Platform [{$platform}] must implement SmmPlatformInterface");
  23. }
  24. return $instance;
  25. }
  26. protected function getPlatformClassName(string $platform): string {
  27. $platform = ucfirst(strtolower($platform));
  28. return "App\\Services\\Smm\\{$platform}Service";
  29. }
  30. // 代理调用平台方法
  31. public function __call(string $method, array $arguments) {
  32. if (method_exists($this->platform, $method)) {
  33. return $this->platform->{$method}(...$arguments);
  34. }
  35. throw new \BadMethodCallException("Method [{$method}] not found on platform");
  36. }
  37. }