У меня есть сценарий, который использует autoload
загрузить классы, которые не найдены. Я сознательно не включаю файл (хотя я могу), но я хотел бы, чтобы функция автозагрузки включала необходимые файлы.
Поскольку сценарий может быть рекурсивным, это - то, если класс уже загружается, я не хочу проверять, что соответствующий файл загружается и если class_exists
на каждой рекурсии сценария.
Если вы хотите избежать __autoload
, вы можете использовать require_once
вместо include
.
Удар по производительности при использовании __autoload
может быть значительным, особенно потому, что некоторые кэши опкодов не поддерживают его должным образом. Однако, учитывая, что это очень удобно, я бы посоветовал использовать его, если только ваш кэш опкодов не кэширует autoload include.
Если вы настроили автозагрузку на загрузку классов и не используете require
(и т.д.), то автозагрузка будет вызвана только в случае ссылки на несуществующий класс. Поэтому никогда не нужно проверять class_exists
в автозагрузке (она не будет вызвана, если класс существует).
Что касается производительности. Если вы используете большие библиотеки, автозагрузка может быть быстрее, поскольку она загружает только те файлы/классы, которые необходимы. В любом случае, по моему опыту, снижение скорости довольно незначительно (всегда используйте кэш опкодов, как уже упоминали другие).