благого эмпирического правила вручную включать все классы, которые вы знаете наверняка, будет использоваться и оставить те классы, которые могут сканировать папки используется для автозагрузчика.
Например, у вас может быть класс библиотеки базы данных, класс типов параметров, класс интернационализации, класс реестра, классы определения интерфейсов, некоторый тип настраиваемого класса исключений, шаблонный класс двигателей и причина фактического класса контроллера, который будет использован.
Таким образом, вы должны включать в себя все из них вручную очень близко к верхней части index.php (или любой другой файл сначала запущен браузер) с использованием включают $ file1.php включают $ file2.php и т.д. ....
Это даст вам лучшую производительность и эти классы гарантированно кэшируются APC (если вы используете APC кэш причины)
Теперь внутри ваших классов вы можете иметь некоторую логику, которая условно использует один или другие класса, в зависимости от ситуации
Например
если (Request :: isAjax()) { AjaxResponder :: SendResponse(); } else { return $ page; }
Теперь это нормально, если автозагрузчик загружает класс AjaxResponder, поскольку он может даже не понадобиться.
Таким образом, если класс может не понадобиться, пусть автозагрузчик обработает его, в противном случае включите его вручную.
Это очень простое правило.
Также очень важно использовать интеллектуальную логику внутри функции автозагрузчика. Удостоверьтесь, что у вас есть как можно меньше условных тестов, а также никогда не используйте сканирование любого типа для поиска файла класса.
Если вы используете spl_autoload_register, помните, что следите за порядком зарегистрированных функций автозагрузки. Приказ, если это важно.
Хороший пример смарт-класса автопогрузчика здесь
http://groups.google.com/group/php-standards/web/psr-0-final-proposal
Обратите внимание, что она не использует какие-либо проверки, чтобы увидеть, если (file_exists()) или что-нибудь подобное. Он просто использует команду require() и полагается на функцию require, чтобы поднять ошибку, если файл не найден.
Никогда не используйте include_once() или require_once внутри автозагрузчика. Это не имеет смысла, поскольку автозагрузчик не будет вызываться в классе уже включен, но require_once и include_once все равно придется выполнить дополнительную проверку, чтобы увидеть, включен ли файл.
Точно, я собирался написать это. '__autoload()' не загружает все ваши классы, а только тот, который используется в текущем скрипте. Это очень хорошая практика * почти всегда *, используемая каркасами. – Shikiryu
Спасибо Nanne, Shikiryu за отзыв! – Steve