Você pode adicionar a uma função interna? Sim, mas você realmente não deveria. Outro código pode contar com os diretórios .
e ..
mostrando os resultados, quebrando assim outro código.
Em vez disso, opte por itens como DirectoryIterator ou crie sua própria classe:
class DirectoryFileScanner implements Iterator
{
public function __construct($path) {
$this->path = $path;
$this->position = 0;
}
private $files;
private $path;
private $position;
private function getFiles() {
if (!isset($this->files)) {
$allFiles = scandir($this->path);
$this->files = [];
foreach($allFiles as $index => $ref) {
if(!in_array(['.','..'], $ref)) {
$this->files[] = $ref;
}
}
}
return $this->files;
}
public current() {
return $this->getFiles()[$this->position];
}
public key() {
return $this->position;
}
public next() {
++$this->position;
}
public rewind() {
$this->position = 0;
}
public valid() {
return isset($this->getFiles()[$this->position]);
}
}
E para usá-lo:
$files = new DirectoryFileScanner('/foo');
foreach ($files as $index => $file) {
// do stuff with $file
}
A solução correta é criar sua própria função ou classe para encapsular o comportamento especializado que você está procurando.