Л А Б О Р А Т О Р И Я

актуальных

РЕШЕНИЙ


Создание классов для обработки разных типов файлов - PHP.

решение тестовой задачи

Описание задачи:

Задание PHP

Размышления над реализацией:

  1. Чтобы не распыляться и сконцентрироваться на решении основной задачи будем создавать все классы в одном файле;
  2. Из условия следует, что у нас должен быть реализован класс ParserFactory со статическим методом build в который передается путь к обрабатываемому файлу $filePath, что мы и создаем (см. стр. 5,7);
  3. Для обработки файлов с допустимыми расширениями надо создать соответствующие классы, для каждого расширения свой класс. Имена классов сделаем отличающимися только на концовку - совпадает с расширением файлов, которые будет обрабатывать этот класс (см. стр. 46, 60, 74);
  4. Общие для всех классов обработчиков файлов методы вынесем в абстрактный класс (см.стр. 28), и будем от него наследоваться. Общими будут: наличие метода import - будет у каждого класса свой, но присутствовать обязан, поэтому абстрактный (см. стр. 33), метод getFile, который будет осуществлять непосредственно загрузку файла, и метод getName - возвращает имя загруженного файла;
  5. Получение имени класса, объект которого необходимо вернуть при запросе из клиентского кода будет происходить следующим образом:
  6. - проверяем существует ли файл и можно ли его прочитать (см.стр. 11), если возможно, то берем из пути к файлу расширение (см.стр. 12);
  7. - если расширение получено и существует, то создаем имя класса, который должен обрабатывать файл с полученным расширением (см. стр. 16);
  8. - проверка на существование имени класса и самого класса (см.стр. 19) позволяет создать объект этого класса (см.стр. 20) и передать ему путь к обрабатываемому файлу;
  9. - отсутствие класса или имени выбрасывает исключение (см.стр. 22);
  10. Основная задача решена. Можно конечно ее усложнить, вынести классы в разные файлы, дополнить файл автозагрузчиком классов, но на решение это уже не повлияет.

Файл с классами:

file script

Удачи в разработке!



другие материалы: