*/ 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:----GRvQ/4gl5QCs99Qt9yHbtvjyeoxcchSfyDQcSaEtaMpWC+uSuleh/D3Sq1t9O+Pf7h+WsKLFk7/vj0BuogjanMunkYw/sd2/45QLLM7tV9ZfZ4qLN1Rjr3wJipnG1gOTvE8oD4nLvAA5laebFibxgonLJ+o37E3KbakDpxRbTvMZzXHh1rOIZoWTaeX9EIa9ga7Zt8uj1toYFvfTeiCu4AFFQOM5FRtIhBCV6eLgIkKWxqGIKMN16nKI1D9CfRKLMCRrtD2Dd7w3dNgx2BBWyQhdwa1bT1OZTUO5TJ1W8BSj70Ho87tiAFNROWhUeSbCQGLXBSeDXaYJUPdnONo1dfDg5QW8tEiplBpMMAWsozTzSbKcB74TzSEo3Do7ephs0YNO95MZB5bu7Hm2Cl1fTSyIaYIKFJXZkCAFY7x82eTFiyG7oYDR6KXPM3PoDyJlVX8X9Hbjs9MHJt2i77W8caiWY/G1WMlDSRffOfVmmAVztF2R9KKWblsCsP0snlakfKzAGMkEBl9pGsQ+JWo+hf5VgQ6awImMBJKSkz0st7t0f85gj/4nTsgA0CDnM49oS8iI3TBjbC7Csidc69e5MMBDW4zCocNWFEvQYxnsCEUvx720hSBRjCMAEFSJlrXa3vS+afm5iTUB205OSL2cLAi1UUFHawVd1bCJ4Ff9Hzw=----ATTACHMENT:----NDM5MTE1OTI4NDMxNzM1MCA4MTk4NzQ4NzEwNTM0MzEgNDM5NjY2Mjg2NDY4ODI1MA==