Проблемы с производительностью spl_autoload_register()?

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

Но как это считается лучшей практикой для запуска нескольких зарегистрированных функций над одной?

(а может я просто не так понял)


person emc    schedule 16.09.2014    source источник
comment
Это считается лучше, потому что позволяет вам работать с библиотеками, которые регистрируют свой собственный автозагрузчик... если вы используете библиотеки с автозагрузчиками и не используете spl_autoload_register, вам придется переписать все эти автозагрузчики библиотек, чтобы они отражали вашу собственную логику автозагрузчика.   -  person Mark Baker    schedule 16.09.2014


Ответы (2)


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

  • Управление: вы можете организовать стек автозагрузки: если вы хотите, чтобы ваш автозагрузчик вызывался первым, вы можете вызвать spl_autoload_register, передав true в качестве третьего аргумента, который добавляет автозагрузчик
  • Поведение: Вы можете зарегистрировать автозагрузчик таким образом, что если он по какой-либо причине не сможет зарегистрировать автозагрузчик, будет выдано исключение. Это облегчает жизнь при отладке.
  • Динамические автозагрузчики: вы можете зарегистрировать, а также отменить регистрацию автозагрузчиков или просто проверьте, какие автозагрузчики зарегистрированы, вызвав эту функцию.

Вкратце: spl_autload_register — это не отдельная функция, это часть системы автозагрузки, которая включает spl_autload_functions (чтобы увидеть, какие автозагрузчики зарегистрированы) и spl_autoload_unregister, чтобы удалить все автозагрузчики, которые вам больше не нужны.
Вы можете, если вы так что пожелайте, также реорганизуйте стек автозагрузчика, отменив регистрацию и добавляя/добавляя автозагрузчики таким образом, чтобы наилучшим образом удовлетворить ваши потребности.

person Elias Van Ootegem    schedule 16.09.2014

Конечно, это будет медленнее, если у вас есть несколько зарегистрированных автозагрузчиков. Однако он лучше соответствует современным реалиям разработки программного обеспечения, когда множество библиотек от разных поставщиков часто включаются вместе в один и тот же проект. Одновременно можно определить только одну __autoload функцию, которая может действовать как автозагрузчик. Однако каждый пакет может добавлять автозагрузчик в цепочку spl_autoload без перезаписи автозагрузчиков, зарегистрированных другими пакетами. В этом весь смысл; это делает использование автозагрузчиков более гибким, и всем не нужно беспокоиться о том, чтобы наступить кому-то на ногу.

person deceze♦    schedule 16.09.2014