new MemoryOptimizedConverter, self::CACHED => new CachedConverter, self::SMART => new SmartConverter, default => throw new InvalidArgumentException("Unknown converter strategy: {$strategy}") }; } /** * 设置默认策略 */ public static function setDefaultStrategy(string $strategy): void { if (! in_array($strategy, [self::MEMORY_OPTIMIZED, self::CACHED, self::SMART])) { throw new InvalidArgumentException("Invalid strategy: {$strategy}"); } self::$defaultStrategy = $strategy; } /** * 获取当前默认策略 */ public static function getDefaultStrategy(): string { return self::$defaultStrategy; } /** * 根据场景推荐策略 * * @param array $context 场景上下文 * @return string 推荐的策略 */ public static function recommend(array $context = []): string { // Web 请求场景 if (($context['sapi'] ?? php_sapi_name()) === 'fpm-fcgi') { return self::MEMORY_OPTIMIZED; } // CLI 批处理场景 if (($context['batch'] ?? false) === true) { return self::CACHED; } // 内存限制场景 $memoryLimit = ini_get('memory_limit'); if ($memoryLimit !== '-1' && self::parseBytes($memoryLimit) < 128 * 1024 * 1024) { return self::MEMORY_OPTIMIZED; } // 默认使用智能策略 return self::SMART; } /** * 获取所有可用策略的信息 */ public static function getStrategiesInfo(): array { return [ self::MEMORY_OPTIMIZED => [ 'name' => '内存优化', 'class' => MemoryOptimizedConverter::class, 'memory' => '~400KB', 'speed' => '中等', 'use_case' => 'Web请求、内存受限环境', ], self::CACHED => [ 'name' => '全缓存', 'class' => CachedConverter::class, 'memory' => '~4MB', 'speed' => '最快', 'use_case' => '批处理、长时运行进程', ], self::SMART => [ 'name' => '智能', 'class' => SmartConverter::class, 'memory' => '600KB-1.5MB', 'speed' => '快', 'use_case' => '通用场景、自动优化', ], ]; } private static function parseBytes(string $value): int { $value = trim($value); $last = strtolower($value[-1]); $value = (int) $value; return match ($last) { 'g' => $value * 1024 * 1024 * 1024, 'm' => $value * 1024 * 1024, 'k' => $value * 1024, default => $value, }; } }