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