php Автозагрузка классов по PSR-4 -- должен ли класс лежать во всех папках, перечисленных в пространстве имён. Объяснение правил

Базовые диретории и префиксы имён

На момент написания этой заметки настраивать автозагрузку следует по стандарту PSR4.

По вопросу из заголовка нас интересуют слова:

Последовательность подпространств имён, следующая за "префиксом пространства имён", соответствует поддиректории в "базовой директории". Разделители пространства имён соответствуют разделителям директорий. Имя поддиректории ДОЛЖНО иметь тот же регистр символов, что и имена подпространств имён.

Речь по сути о том, что:

Если у класса имя:

ItForFree\PhpExamples\MyProject\MyClass.php

-- то это не значит, что, скажем, в корне проекта обязательно должна лежать папка с имененем ItForFree -- на самом деле какую-то часть секции из начала имени файла ("префикс пространства имён" ) мы "направим" на произвольную папку ("базовую директорию" -- именно в ней начнётся поиск для данного префикса), скажем на:

vendor/it-for-free/php-examles

-- эта папка и будет "базовой директорией" -- а вот уже в ней все папки должны именоваться в точности как в оставшейся части пространства имен, а "осталось" у нас:

MyProject\MyClass.php

это значит, что в vendor/it-for-free/php-examles должна лежать папка с именем MyProject (именно такими буквами) а уже в ней файл MyClass.php

В каком-то смысле это есть назначение базовой директории псевдонима, называемого "префиксом пространства имён": то есть мы как бы говорим системе автозагрузки, что:

все классы, у которых полное имя начинается с ItForFree\PhpExamples надо начинать искать в папке vendor/it-for-free/php-examles

а уже внутри его поиск идёт по "зеркальному соотвествию".

ПРИМЕЧАНИЕ: именно такую ситуацию мы можем наблюдать в настройках композера здесь -- ведь там имя владельца и пакета традиционно пишется маленькими буквами, что не соответствует, опять же, традиционному CamelCase в именовании классов PHP, поэтому мы назначем диретории "пространственный" псевдоним.

Возможность разных префиксов для разных базовых директорий

Разным префиксам могут соответствовать разные базовые директории.

Key Words for FKN + antitotal forum (CS VSU):

vedro-compota's picture

Смотрите тут: http://fkn.ktu10.com/?q=node/10571 (на примере composer)

_____________
матфак вгу и остальная классика =)