Я использую функцию __autoload(), которая учитывает несколько различных соглашений об именах файлов, чтобы обеспечить обратную совместимость с предыдущими разработчиками.
Он выполняет простой цикл над каждым соглашением и проверяет, существует ли этот файл. Если файл существует, он загружает его.
Для моей функции я делаю это для разных расширений файлов, таких как .inc, .class или .inc.php. Вы можете сделать то же самое, но искать верхние и нижние символы.
Я бы поместил это в метод searchForClassFile(), в остальной части с комментарием «Найден файл».
EDIT (больше информации):
Вместо того, чтобы рекурсивно спускаться в каталог класса ищет нужный файл, я сопоставить имя класса в определенном месте. Это обычная практика. Например, foo_bar
отображается на [CLASS_DIRECTORY]/foo/bar.[EXTENSION]
. В нашем случае мы проверяем несколько разных расширений.
В вашем случае, вы должны сделать дизайнерское решение о том, как вы хотите найти файл класса, но изменения кода:
} else {
// Found a file
if ($f == $className . self::$classFileSuffix ||
$f == strtolower($className) . self::classFileSuffix) {
return $subPath;
}
}
Вместо strtolower() вы могли бы написать функцию, которая только снижает первый символ или использует PHP> 5.3.0 (официально не выпущен), используя функцию lcfirst().
Вы могли бы показать пример? – sanders