Метод getIterator класса Finder
Метод getIterator класса Finder возвращает объект, реализующий интерфейс \Iterator, для последовательного обхода результатов поиска. Класс Finder сам реализует интерфейс \IteratorAggregate, поэтому данный метод вызывается автоматически при использовании foreach. Параметров метод не принимает.
Синтаксис
public function getIterator(): \Iterator
Пример
Давайте создадим объект Finder, найдём все файлы в директории src и обойдём их через foreach. Метод getIterator будет вызван неявно:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Finder\Finder;
class FinderController extends AbstractController
{
public function index(): Response
{
$finder = new Finder();
$finder->files()->in('src');
$res = [];
foreach ($finder as $file) {
$res[] = $file->getFilename();
}
return new Response(implode(', ', $res));
}
}
?>
Результат выполнения кода:
FinderController.php
Пример
Давайте получим итератор явно с помощью метода getIterator и проверим, является ли он экземпляром класса ArrayIterator:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Finder\Finder;
class FinderController extends AbstractController
{
public function index(): Response
{
$finder = new Finder();
$finder->files()->in('src');
$iterator = $finder->getIterator();
if ($iterator instanceof \ArrayIterator) {
return new Response('iterator is ArrayIterator');
}
return new Response('iterator is not ArrayIterator');
}
}
?>
Результат выполнения кода:
"iterator is ArrayIterator"
Пример
Давайте найдём все директории внутри src, получим итератор и выведем количество элементов через метод count:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Finder\Finder;
class FinderController extends AbstractController
{
public function index(): Response
{
$finder = new Finder();
$finder->directories()->in('src');
$iterator = $finder->getIterator();
$res = iterator_count($iterator);
return new Response((string) $res);
}
}
?>
Результат выполнения кода:
"2"
Смотрите также
-
класс
Finder,
который предоставляет удобный интерфейс для поиска файлов -
метод
files,
который ограничивает поиск только файлами -
метод
directories,
который ограничивает поиск только директориями -
метод
hasResults,
который проверяет наличие результатов поиска