D7net
Home
Console
Upload
information
Create File
Create Folder
About
Tools
:
/
opt
/
psa
/
admin
/
plib
/
vendor
/
jms
/
metadata
/
src
/
Driver
/
Filename :
DriverChain.php
back
Copy
<?php declare(strict_types=1); namespace Metadata\Driver; use Metadata\ClassMetadata; final class DriverChain implements AdvancedDriverInterface { /** * @var DriverInterface[] */ private $drivers; /** * @param DriverInterface[] $drivers */ public function __construct(array $drivers = []) { $this->drivers = $drivers; } public function addDriver(DriverInterface $driver): void { $this->drivers[] = $driver; } public function loadMetadataForClass(\ReflectionClass $class): ?ClassMetadata { foreach ($this->drivers as $driver) { if (null !== $metadata = $driver->loadMetadataForClass($class)) { return $metadata; } } return null; } /** * {@inheritDoc} */ public function getAllClassNames(): array { $classes = []; foreach ($this->drivers as $driver) { if (!$driver instanceof AdvancedDriverInterface) { throw new \RuntimeException( sprintf( 'Driver "%s" must be an instance of "AdvancedDriverInterface" to use ' . '"DriverChain::getAllClassNames()".', get_class($driver) ) ); } $driverClasses = $driver->getAllClassNames(); if (!empty($driverClasses)) { $classes = array_merge($classes, $driverClasses); } } return $classes; } }