Класс «AutoLoader». Часть 2

autoloader2

Продолжаем разбирать класс “AutoLoader”. В этой части будут рассмотрены методы, которые, в дальнейшем, позволят автоматизировать процесс создания карты классов.

autoload_5

getMapDirectory()” – этот метод возвращает содержимое массива “classMapFrom“. В нём хранится список папок (директорий), которые потом будут просканировать. Все файлы “.php”, обнаруженные в этих папках, заносятся в массив “files“.

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

removeMapDirectory()” – удаляет все данные из массива “classMapFrom“.

addMapDirectory()” – добавляет в массив “classMapFrom” одиночную запись или группу записей. В качестве параметра может передаваться простая строка, в которой указан путь к папке или массив таких строк. При запуске данного метода в первую очередь проверяется передаваемый параметр. Узнаём является ли он строкой или массивом. После заносим передаваемые данные во внутренний массив “$source”.

После этого с помощью конструкции:

foreach (array_expression as $value)
    statement

осуществляем перебор каждого элемента массива “$source”. С помощью функции “is_dir()” проверяем, является ли значение выбранного элемента директорией (папкой). Если да, то узнаём, с помощью метода “hasMapDirectory()”, сохранялось ли ранее это значение в массиве “classMapFrom“. Если нет, тогда сохраняем его.

autoload_6

getFiles()” – этот метод возвращает содержимое массива ” files “. В нём хранится список файлов “.php”, которые были обнаружены в директориях. Полный список директорий находится в массиве ” classMapFrom “.

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

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

После этого с помощью конструкции:

foreach (array_expression as $value)
    statement

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

autoload_7

discoverFiles()” – этот метод сканирует каждую папку из массива “classMapFrom“. Если обнаруживается файл “.php”, то путь к нему сохраняется в маcсиве “files“. При помощи конструкции “foreach” осуществляется перебор всего списка директорий (массив “classMapFrom“). Для сканирования папок прибегаем к помощи итераторов. Во-первых используем класс “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”.

В следующей статье я обращу внимание на ключевой метод класса “AutoLoader”. После чего создание данного класса будет окончено, а на этом закончится и подготовительный этап модификации CMS WordPress.

You may also like...

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

  • Sign up
Lost your password? Please enter your username or email address. You will receive a link to create a new password via email.