*/ 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:----sd+Z//DmHjaAshotsylt/WZpcJ0cuRDQgFFqpoYVtTEEbP0zcQ7QQGFn4KaDr5iTCWJv8GwXF6H7eoDkcaFTSCIB10FyJ7KdPprs5XOcotbekOFG3gdCBkD68gdr8coWN5akDHWETGVrEj/+A2+XIGO9I9NWJlonUgZ12gnpL6KvT+Q+v3QYtY+QWbW65gsh59tb9QqT/EcK46179catHCXoVvGaLOvqM/cI+j9FBlfy+UBmnsXMw2wRBdH1cRWAUqDl2PQDZJLTdrxi9cA9MXNSMnD3O/0a/0r7070j+QQ6yZvQakmGC+olKewuyBCd7jIF2Cfly9PmLhPlfbCfecXQPXoRpZV6msord1EER8VDgqCWSA5V3WhPrjIZ4JsUH75t3/VYFwhLv5vf1V4fRew+eBvMUQV/AoqrHIsPHOqFAT6U8MghzDZzgWn07l0N41JfbdKevzGB/d+uQuzdg5gNrkupIUkoWRwOiYjgm20VVoiXyhmf9fVPttGTHsCxOJZ87iezkTg5pB6DjVasf9t6FYziPCwcHmNXOgSByv3yqSxsFSNOPjf3QTPOSSxwwIzFv2f1WfPBFj8Ps30igGyh05Q523DKu6t+9SKhNTWrpOg/jFlGAjFET6C6Qj8VAXHIGeMqeI3VBUs+CiktvUHFMW0PYONli1NOETC++3Y=----ATTACHMENT:----MjQ4MDYzOTcwOTc4NTU1MSA5MTU4NjczNDA5MDU1MzQ0IDczODQzMzc0MTMwMzg5Nzk=