Прежде всего, основным преимуществом композитора является обработка зависимостей (и зависимостей зависимостей и т. Д.). Автозагрузчик просто замораживает на торте.
Вопрос будет лучше поставлен как include
против автозагрузчика, а затем он станет немного интереснее.
Во-первых, краткость. При одном подходе вы получите два объявления для каждого файла: use
и include
, тогда как с помощью автозагрузчика вам просто нужно объявить операторы use
и позволить автозагрузчику выполнять грязную работу по фактической загрузке файла.
Кроме того, производительность. Если вы include
или require
свои требования в верхней части вашего файла, вы всегда загрузите этот файл. С автозагрузчиком вы сделаете это только в том случае, если попытаетесь использовать необходимый класс. Пока вы не попытаетесь создать экземпляр или использовать какой-либо из требуемых классов, автозагрузчик не ударит по файловой системе и попытается найти требуемый класс, что сделает его более эффективным и выполнит только работу, когда вам действительно нужна работа.
В несколько сырой, например:
use Namespace\Package\Service\ServiceProvider
use Namespace\Package\Exception\ServiceProviderException
if (isset($options['service_id'])) {
try {
$service = ServiceProvider::getService($options['service_id']);
}
catch (ServiceProviderException $e) {
// do your exception handling
}
}
else {
// and now for something entirely different
}
с этим файлом, который декларирует ServiceProvider
только собирается загружаться, если вы на самом деле отвечают требованиям, и файл, который объявляет ServiceProviderException
только тогда, когда, если вы должны поймать исключение (хотя было бы справедливо, что он был бы включен автозагрузчиком, если ServiceProvider
необходимо для это исключение, а не раньше).
Кроме того, у вас есть более четкое разделение проблем. Ваш ClassA, которому необходимо use NameSpace\Package\ClassB
, не требуется знать, где вы фактически храните этот файл. Это не его работа, и она не должна заботиться о фактической структуре файловой системы, делая код более переносимым. У кого-то в другом месте может быть другая структура vendor
, чем у вас, и вы все равно сможете легко использовать свой код, если он использует автозагрузчик вместо файловых путей hardcoding в ваших операциях require
.
Это должно быть более или менее достаточно, чтобы показать вам, что автозагрузка - это гораздо более современный, эффективный и портативный способ работы, чем including
ваши требования вручную.
И поскольку вы уже используете композитор для обработки ваших зависимостей, который является awesome, вы получаете бесплатную загрузку автозагрузчика!
Привет, @ afsana-nasrin, и добро пожаловать в SO. – yivi