Если библиотеки PHP могут регистрировать свои собственные автозагрузчики, то почему PSR-0 требует, чтобы они находились в единых каталогах?

Я создаю фреймворк (это огромное упрощение - пожалуйста, не рекомендуется использовать вместо него существующий фреймворк, который не поможет), в который я хотел бы иметь возможность интегрировать другие библиотеки.

Рекомендация PSR-0 предлагает, чтобы все файлы в каждом подпространстве имен содержались в их собственном определенном каталоге. Чтобы сделать вещи менее сложными для пользователей моего фреймворка, я хотел бы хранить все в одном пространстве имен, но организовывать файлы в каталогах.

Если библиотеки PHP могут зарегистрировать свои собственные автозагрузчики с spl_register_autoload(), тогда почему важно придерживаться этой структуры каталогов? Возможно ли / допустимо просто отказаться от PSR-0, использовать мой собственный автозагрузчик для моих классов, а затем использовать (например) автозагрузчик Symfony для любых классов Symfony, которые я могу использовать?

2 ответа

Решение

Там никто не заставляет вас придерживаться стандарта. Конечно, вы можете сделать свой собственный автозагрузчик и использовать его.

Скорее всего, спецификация была создана для того, чтобы облегчить понимание библиотек. Идея заключается в том, что если весь код использует одну и ту же структуру, то каждый должен иметь возможность мгновенно узнать, куда идти, чтобы найти определенный класс.

Следование стандартам имеет определенные преимущества, такие как:

  • Люди со знанием стандарта уже будут знать, как использовать код
  • Стандартный совместимый инструментарий может быть создан для работы со встроенным кодом (например, плагинами IDE)
  • Код, который предполагает соответствие стандарту, уже может использоваться со всем прикрепленным кодом, даже если он не был создан специально для вашего собственного кода (например, сторонние автозагрузчики должны иметь возможность загружать ваш код, а ваш собственный автозагрузчик должен иметь возможность загружать третий код партии)

Недостатком может быть то, что вам может не понравиться стандарт. Если это так, то вы должны учитывать преимущества, когда решаете, следует ли им следовать.

Кроме того, если другие библиотеки придерживаются стандарта, вы можете просто использовать один автозагрузчик для загрузки классов из нескольких библиотек, а не использовать свой автозагрузчик для своих классов, а затем придется загрузить автозагрузчик Symfony для своих классов и затем автозагрузчик библиотеки X для его классы.

Пока автозагрузчик совместим с PSR и структурами каталогов других библиотек, вы можете использовать один автозагрузчик.

Другие вопросы по тегам