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


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

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

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

Author: ringmaster, 2012-12-04

2 answers

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

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

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

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

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

 6
Author: rid, 2012-12-03 22:11:17

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

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

 1
Author: drew010, 2012-12-03 21:56:06