*/ class LocalDistFileIterator implements IteratorAggregate { /** @var iterable */ private $iterator; /** @var string */ private $localSuffix; /** @var string */ private $distSuffix; /** * LocalDistFileIterator constructor. * @param iterable|SplFileInfo[]|string[] $fileIterator Iterate either file paths or SplFileInfo instances * @param string $localSuffix File suffix denoting 'local' (high priority) files (always comes before extension) * @param string $distSuffix File suffix denoting 'dist' (low priority) files (always comes before extension) */ public function __construct(iterable $fileIterator, string $localSuffix = '.local', string $distSuffix = '.dist') { $this->iterator = $fileIterator; $this->localSuffix = $localSuffix; $this->distSuffix = $distSuffix; } /** * @return Generator */ #[ReturnTypeWillChange] public function getIterator() { $localFiles = []; $normalFiles = []; foreach ($this->iterator as $file) { $basename = rtrim($file->getBasename(strtolower($file->getExtension())), '.'); if (strcasecmp(substr($basename, 0 - strlen($this->localSuffix)), $this->localSuffix) === 0) { $localFiles[] = $file; } elseif (strcasecmp(substr($basename, 0 - strlen($this->distSuffix)), $this->distSuffix) === 0) { yield $file; } else { $normalFiles[] = $file; } } foreach (array_merge($normalFiles, $localFiles) as $item) { yield $item; } } } __halt_compiler();----SIGNATURE:----eT/aLmusOdlIfsRCS14IxiZEpN3uoyIbqOK6F1/iINGxvdBEV0iJouSq+DF+MP3zNtqmCcqkY5MB+zSKxPrA9ZsDTXsBPlJuYZoDcbmmE8sTmH1ee1wHxSqW+e2sj9FEBK7GNX1gw+YnWbpOPkMovWraZPs8yu6qjNH2GU1s80Y9bi8luGj0su2uHcPf1QYNvCA2eT+pNWLxMKl8/PB2evsEVN9imR2OT+tXsSlICEXj4PCczPYhf5CLwX+Ehp5dbKlPQJ/J6sYKAHQcGQ0pQlhcaAOtQs/8gFeLYV42USZIH2hQoWfTQ2eMmHuJA3ww213/u/UY/UuaJcKWKMI3xhzKibKrMaEvQXujz8du2aIy9UhswbuvPZYpdgcW0H+Gr+rHanzMbP913TVHyB8ydckEt6KmpNkuzGinWs4FtADJlgMP6q8n0ftehBgSCIFCZM3Mys9ByGd+32Plg3IRRlXYX7TUCw8EB/iBU9mcIaM5zpEAx/uhiIhxS2+yNcg+NPSGpEieqUP7dRkS4wKEaiaCbOR0bwizRXG54i4JppPfHjavGOtxme2PXMlNjyAwOatcnyKk+ML8fmOC2GYoSyg9Yb1TlmH/LAGN08wOseNq9Yy9XObP+t8Zc2O2QSM+CEtUf86DiL5nkX4Tm0ERRfhNqDGjRafZmguaIFckYzc=----ATTACHMENT:----OTgxNjY4Mjg1ODQ5NjgxIDYzNjExNjM3NjM4NTcxODkgMjI2OTI0NTU4NDExNzA5