Перейти к содержанию

3.6 Класс «Autoloader». Работа с файлами

Last updated on 09.05.2021

autoloader2

В данной статье мы познакомимся с методами класса «Autoloader«, которые будут будут искать все файлы «.php» в папках и сохранять пути к ним в массиве. Вся работа с файлами ляжет на следующие методы:

Метод getFiles()

Метод hasFiles()

Метод addFiles()

Метод discoverFiles()

Метод getFiles()

Этот метод возвращает содержимое массива » files «. В нём хранится список файлов «.php», которые были обнаружены в директориях. Полный список директорий находится в массиве » classMapFrom «.

работа с файлами

Метод hasFiles()

Данному методу, в качестве параметра(«$path»), передаётся месторасположение файла. С помощью функции «in_array()» выясняем существует ли значение переменной «$path» в массиве «files«. Если да, то метод возвращает «TRUE». Если нет, то метод возвращает «FALSE».

Метод addFiles()

Добавляет в массив «files» одиночную запись или группу записей. В качестве параметра может передаваться простая строка, в которой указан путь к файлу или массив таких строк. При запуске данного метода в первую очередь проверяется передаваемый параметр. Узнаём является ли он строкой или массивом. После заносим передаваемые данные во внутренний массив «$source».

После этого с помощью конструкции осуществляем перебор каждого элемента массива «$source».

foreach (array_expression as $value)
    statement

С помощью функции «file_exists()» проверяем, является ли значение выбранного элемента файлом. Если да, то узнаём, с помощью метода «hasFiles()», сохранялось ли ранее это значение в массиве «files«. Если нет, тогда сохраняем его.

Метод discoverFiles()

Основная работа с файлами приходится именно на этот метод. Он сканирует каждую папку из массива «classMapFrom«. Если обнаруживается файл «.php», то путь к нему сохраняется в маcсиве «files«. При помощи конструкции «foreach» осуществляется перебор всего списка директорий (массив «classMapFrom«).

autoload-7

Для сканирования папок прибегаем к помощи итераторов. Во-первых используем класс «RecursiveDirectoryIterator». Этот класс позволяет перебирать директории. Этот класс использует, по умолчанию, итератор файлов » FilesystemIterator «.

Что же происходит? При инициализации класса «RecursiveDirectoryIterator» ему передаётся месторасположение папки (директории). Начинается её сканирование. Данный итератор ищет вложенные папки, а использование класса «FilesystemIterator» позволяет тут же находить файлы, которые находятся тут же в директории. Но «RecursiveDirectoryIterator» не может самостоятельно обработать вложенные папки, если таковые будут найдены. Вот тут на помощь приходит класс «RecursiveIteratorIterator».

Он перемещает внутренний указатель во вложенные директории и заново запускает класс «RecursiveDirectoryIterator». Благодаря этому мы получаем полный список всех файлов, что находятся в указанной нами директории. Заметьте каждый элемент этого списка является объектом «FilesystemIterator». Параметр «RecursiveIteratorIterator::SELF_FIRST» указывает на то, чтобы навигация осуществлялась по всему дереву элементов, причем первыми должны идти родительские элементы.

Итак мы получили список всех файлов. Он хранится в переменной «$objects». Теперь нам необходимо выяснить какие из них имеют расширение «.php». Для этого опять используется конструкция «foreach». Анализируя каждый элемент списка, сначала узнаём его имя, с помощью метода «getFilename()». Для нас крайне важно, чтобы имена элементов отличались от символов «.» и «..» . Эти два символа указывают на родительские папки.

Если имя элемента не имеет никакого отношения к родительским директориям, то с помощью метода «isDir()» выясняем, является ли этот элемент папкой или нет. Если нет, тогда сохраняем путь к этому элементу в переменной «$f». Переменная «$f» теперь является строковой. Теперь переведём всю эту строку в нижний регистр, используя функцию «strtolower()». После этого в полученной строке необходимо найти подстроку «.php». Для этого используется функция «substr()». Если такая подстрока найдена, значит анализируемый элемент является php-файлом. Путь к нему сохраняется в маcсиве «files» при помощи метода «addFiles()» класса «AutoLoader».

Работа с файлами окончена. Теперь их необходимо подключить. Этим мы займёмся в следующей статье.

Опубликовано в рубрике3. Класс AutoloaderЯдро Wordpress