vendor/symfony/property-info/PropertyInfoExtractor.php line 88

Open in your IDE?
  1. <?php
  2. /*
  3.  * This file is part of the Symfony package.
  4.  *
  5.  * (c) Fabien Potencier <fabien@symfony.com>
  6.  *
  7.  * For the full copyright and license information, please view the LICENSE
  8.  * file that was distributed with this source code.
  9.  */
  10. namespace Symfony\Component\PropertyInfo;
  11. /**
  12.  * Default {@see PropertyInfoExtractorInterface} implementation.
  13.  *
  14.  * @author Kévin Dunglas <dunglas@gmail.com>
  15.  *
  16.  * @final
  17.  */
  18. class PropertyInfoExtractor implements PropertyInfoExtractorInterfacePropertyInitializableExtractorInterface
  19. {
  20.     private $listExtractors;
  21.     private $typeExtractors;
  22.     private $descriptionExtractors;
  23.     private $accessExtractors;
  24.     private $initializableExtractors;
  25.     /**
  26.      * @param iterable<mixed, PropertyListExtractorInterface>          $listExtractors
  27.      * @param iterable<mixed, PropertyTypeExtractorInterface>          $typeExtractors
  28.      * @param iterable<mixed, PropertyDescriptionExtractorInterface>   $descriptionExtractors
  29.      * @param iterable<mixed, PropertyAccessExtractorInterface>        $accessExtractors
  30.      * @param iterable<mixed, PropertyInitializableExtractorInterface> $initializableExtractors
  31.      */
  32.     public function __construct(iterable $listExtractors = [], iterable $typeExtractors = [], iterable $descriptionExtractors = [], iterable $accessExtractors = [], iterable $initializableExtractors = [])
  33.     {
  34.         $this->listExtractors $listExtractors;
  35.         $this->typeExtractors $typeExtractors;
  36.         $this->descriptionExtractors $descriptionExtractors;
  37.         $this->accessExtractors $accessExtractors;
  38.         $this->initializableExtractors $initializableExtractors;
  39.     }
  40.     /**
  41.      * {@inheritdoc}
  42.      */
  43.     public function getProperties(string $class, array $context = []): ?array
  44.     {
  45.         return $this->extract($this->listExtractors'getProperties', [$class$context]);
  46.     }
  47.     /**
  48.      * {@inheritdoc}
  49.      */
  50.     public function getShortDescription(string $classstring $property, array $context = []): ?string
  51.     {
  52.         return $this->extract($this->descriptionExtractors'getShortDescription', [$class$property$context]);
  53.     }
  54.     /**
  55.      * {@inheritdoc}
  56.      */
  57.     public function getLongDescription(string $classstring $property, array $context = []): ?string
  58.     {
  59.         return $this->extract($this->descriptionExtractors'getLongDescription', [$class$property$context]);
  60.     }
  61.     /**
  62.      * {@inheritdoc}
  63.      */
  64.     public function getTypes(string $classstring $property, array $context = []): ?array
  65.     {
  66.         return $this->extract($this->typeExtractors'getTypes', [$class$property$context]);
  67.     }
  68.     /**
  69.      * {@inheritdoc}
  70.      */
  71.     public function isReadable(string $classstring $property, array $context = []): ?bool
  72.     {
  73.         return $this->extract($this->accessExtractors'isReadable', [$class$property$context]);
  74.     }
  75.     /**
  76.      * {@inheritdoc}
  77.      */
  78.     public function isWritable(string $classstring $property, array $context = []): ?bool
  79.     {
  80.         return $this->extract($this->accessExtractors'isWritable', [$class$property$context]);
  81.     }
  82.     /**
  83.      * {@inheritdoc}
  84.      */
  85.     public function isInitializable(string $classstring $property, array $context = []): ?bool
  86.     {
  87.         return $this->extract($this->initializableExtractors'isInitializable', [$class$property$context]);
  88.     }
  89.     /**
  90.      * Iterates over registered extractors and return the first value found.
  91.      *
  92.      * @param iterable<mixed, object> $extractors
  93.      * @param list<mixed>             $arguments
  94.      *
  95.      * @return mixed
  96.      */
  97.     private function extract(iterable $extractorsstring $method, array $arguments)
  98.     {
  99.         foreach ($extractors as $extractor) {
  100.             if (null !== $value $extractor->{$method}(...$arguments)) {
  101.                 return $value;
  102.             }
  103.         }
  104.         return null;
  105.     }
  106. }