Автозагрузчик, преобразующий пространство имен в путь к папке - PullRequest
0 голосов
/ 29 марта 2012

Хорошо ли использовать автозагрузчик, который загружает root/app/model/test.php при попытке использовать App\Model\Test? Таким образом, каждый класс должен быть организован в соответствии с его пространством имен.

Это хороший подход? Если нет, то почему? что ты предлагаешь?

Должен ли я определить конкретный массив namespace => path, который будет гарантировать, что мы не загружаем неожиданный файл? таким образом, я должен был бы каждый раз устанавливать что-то вроде $map['App\Model\Test'] = 'root/app/model/test';, и это в основном удаляло бы все удовольствие от автозагрузчика. Не так ли?

1 Ответ

1 голос
/ 29 марта 2012
  1. Это довольно «стандартный» подход, используемый в ООП
  2. Обычно автозагрузчики работают быстрее, когда в них вставлена ​​карта классов ($map). Это связано с тем, что им не нужно проходить по путям включения, чтобы найти файл с экземпляром класса. Дайте им абсолютное имя файла, и вы отделите их от пути включения. Предоставление $map также позволяет вам организовывать свои занятия другим способом (не только именованием на основе файловой системы). Помимо этого, есть также генераторы карт классов, которые вы могли бы запустить раньше, чтобы на самом деле добиться этого, и вам не нужно (повторно) делать это вручную каждый раз, когда вы переименовываете или перемещаете какой-либо класс. Однако во время разработки удобнее использовать стандартную логику автозагрузки (без карт классов), поскольку хранение в файлах синхронизации и объявленных в них классах может быть довольно утомительным и иметь мало общего с самой разработкой.

Уменьшение количества шаблонного кода не единственная цель автозагрузчика:

  • вы загружаете только те объявления классов, которые действительно нужны в вашем коде; не все или некоторые объявления; только те, которые используются
  • гарантирует, что ваши include_once и require_once в отношении классов происходят только в автозагрузке
  • ваши занятия не сосредоточены на загрузке файлов; они сосредоточены на своей функции
...