Относительные пути обрабатываются не относительно файла, в который они записаны, а скорее как «текущий рабочий каталог» процесса PHP (часто это корень документа вашего веб-процесса, но на него не стоит полагаться).
Чтобы сослаться на местоположение текущего исходного файла, PHP предоставляет две магические константы :
__FILE__
- полное имя файла любого исходного файла, в который вы его записываетев __DIR__
- это каталог, содержащий этот файл
Итак, если ваши классы находятся в том же каталоге, что и определение вашей функции автозагрузчика, вы можете написать это:
function autoloader($className){
include_once __DIR__ . DIRECTORY_SEPARATOR . $className . '.php';
}
__DIR__
разрешается один раз, когда функция компилируется, поэтому всякий раз, когда эта функция запускается, она всегда будет ссылаться на каталог, где была определена эта функция , независимо от того, гдеон был вызван или как выполняется скрипт.
(Обратите внимание, что include
, require
, include_once
и require_once
являются ключевыми словами, а не функциями, и не нуждаются в скобках.и ихДобавление их в целом не повредит, но в некоторых случаях может привести к путанице, поэтому лучше избегать.)