vendor/jms/metadata/src/Driver/DriverChain.php line 43

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace Metadata\Driver;
  4. use Metadata\ClassMetadata;
  5. final class DriverChain implements AdvancedDriverInterface
  6. {
  7.     /**
  8.      * @var DriverInterface[]
  9.      */
  10.     private $drivers;
  11.     /**
  12.      * @param DriverInterface[] $drivers
  13.      */
  14.     public function __construct(array $drivers = [])
  15.     {
  16.         $this->drivers $drivers;
  17.     }
  18.     public function addDriver(DriverInterface $driver): void
  19.     {
  20.         $this->drivers[] = $driver;
  21.     }
  22.     public function loadMetadataForClass(\ReflectionClass $class): ?ClassMetadata
  23.     {
  24.         foreach ($this->drivers as $driver) {
  25.             if (null !== $metadata $driver->loadMetadataForClass($class)) {
  26.                 return $metadata;
  27.             }
  28.         }
  29.         return null;
  30.     }
  31.     /**
  32.      * {@inheritDoc}
  33.      */
  34.     public function getAllClassNames(): array
  35.     {
  36.         $classes = [];
  37.         foreach ($this->drivers as $driver) {
  38.             if (!$driver instanceof AdvancedDriverInterface) {
  39.                 throw new \RuntimeException(
  40.                     sprintf(
  41.                         'Driver "%s" must be an instance of "AdvancedDriverInterface" to use ' .
  42.                         '"DriverChain::getAllClassNames()".',
  43.                         get_class($driver)
  44.                     )
  45.                 );
  46.             }
  47.             $driverClasses $driver->getAllClassNames();
  48.             if (!empty($driverClasses)) {
  49.                 $classes array_merge($classes$driverClasses);
  50.             }
  51.         }
  52.         return $classes;
  53.     }
  54. }