storages = $storages; $this->logger = $logger; } /** * @param string $featureFlag The ::class name of a class that implements FeatureFlagInterface */ public function isFeatureActive(string $featureFlag): bool { $featureFlagObj = $this->createFeatureFlagObjFromString($featureFlag); if ($featureFlagObj === null) { return false; } if ($featureFlagObj instanceof ForcedFeatureFlagStateInterface) { return $featureFlagObj->getForcedFeatureFlagState(); } $featureActive = false; foreach ($this->storages as $storage) { $isActive = $storage->isFeatureActive($featureFlagObj); if ($isActive !== null) { $featureActive = $isActive; } } return $featureActive; } /** * @internal */ public static function deleteFeatureFlag(string $featureFlagName): void { /** @var FeatureFlagStorageInterface $storage */ foreach (StaticContainer::get('featureflag.storages') as $storage) { $storage->deleteFeatureFlag($featureFlagName); } } private function createFeatureFlagObjFromString(string $featureFlag): ?FeatureFlagInterface { if (!is_subclass_of($featureFlag, FeatureFlagInterface::class)) { $this->logger->debug( 'isFeatureActive failed due to class not implementing FeatureFlagInterface', [ 'featureFlag' => $featureFlag, ] ); return null; } return new $featureFlag(); } }