Поскольку наше приложение PHP5 OO выросло (как по размеру, так и по трафику), мы решили пересмотреть стратегию __autoload().Лучшее решение для __autoload
Мы всегда называем файл определением класса, который он содержит, поэтому класс Customer будет содержаться в Customer.php. Мы использовали список каталогов, в которых файл потенциально может существовать, пока не будет найден правильный .php-файл.
Это довольно неэффективно, потому что вы потенциально проходите через ряд каталогов, которые вам не нужны, и делайте это при каждом запросе (таким образом, создавая множество вызовов stat()).
Решения, которые приходят на ум ...
-use в именовании, которые диктуют имя каталога (похожее на PEAR). Недостатки: не слишком большой масштаб, что приводит к ужасным именам классов.
-доступайте с заранее подготовленным массивом местоположений (propel делает это для своей __autoload). Недостаток: требуется пересоздание до развертывания нового кода.
-строить массив «на лету» и кешировать его. Это, по-видимому, лучшее решение, так как оно позволяет вам использовать любые имена классов и структуру каталогов и полностью гибко в том, что новые файлы просто добавляются в список. Вызывает озабоченность: где хранить его и что делать с удаленными/перемещенными файлами. Для хранения мы выбрали APC, поскольку у него нет служебных данных ввода-вывода на диске. Что касается удаления файлов, это не имеет значения, так как вы, вероятно, не захотите их нигде в любом случае. Что касается ходов ... это нерешено (мы игнорируем его, поскольку исторически это не случалось очень часто для нас).
Любые другие решения?
Два больших преимущества автозагрузки: 1) отсутствие необходимости вручную загружать классы перед их использованием и 2) не жесткое кодирование их местоположений в файловой системе. Вы отменили оба. – Preston 2009-01-10 03:09:00
Возможно, вы правы, если ваш проект использует несколько классов, но для больших проектов OO вам придется перейти на другое решение. Представьте, что php ищет один класс через все каталоги огромной структуры. Слишком плохо без каких-либо импортных подсказок. – azkotoki 2009-01-10 18:45:41