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

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