psr-4 bietet sich hier an, damit eure Pakete leicht eingebunden werden können.
In der Annahme, dass ihr composer benutzt, passiert die gesamte Konfiguration in der composer.json. Hier gibt es die keys autoload und autoload-dev um Autoloadingmechanismen zu definieren.
Definiert in dem autoload und autoload-dev ein neues Objekt an der Eigenschaft psr-4. Dieses Objekt wird eure Zuordnung zwischen Namespace und Ordner enthalten.
Klassisch wird dann in autoload.psr-4 eine Eigenschaft My\Namespace\ definiert und der Wert src verwendet. Bei autoload-dev.psr-4 wird entsprechend My\Namespace\ definiert und mit dem Wert test versehen.
{
"autoload": {
"psr-4": {
"My\\Namespace\\": "src"
}
},
"autoload-dev": {
"psr-4": {
"My\\Namespace\\": "test"
}
}
}
Damit sind auch alle untergeordneten Namespaces verfügbar, wenn ihr die Dateinamen entsprechend den Klassennamen wählt und die Ordnernamen entsprechend dem untergeordneten Namespace. In unserem Beispiel würde das Interface My\Namespace\Example\Contract in src/Example/Contract.php liegen.
Um die neuen Namespacedefinitionen verfügbar zu haben muss composer install, composer update oder composer dump-autoload ausgeführt werden. Dies aktualisiert die Klassen, die die Auflösung der Namen übernehmen.
Für die Produktivnutzung ist stark zu empfehlen das Flag optimize_autoloader auf true zu setzen. Dies reduziert die Zeiten für Suchen und die dafür nötigen Dateisystemzugriffe stark, kann Änderungen an den Dateistrukturen aber nicht automatisch abhandeln. Bei einem neuen Deployment ist also eine Aktualisierung vorzunehmen.