# PSR-4 Autoloading standard

La **PSR-4 (Autoloading)** és l'estàndard clau que defineix un mètode consistent perquè els *autoloader* de PHP localitzin i carreguin fitxers de classe basant-se en el seu **Namespace**. Resoldre el problema d'haver d'utilitzar `require` o `include` repetidament, fent que el codi sigui net i promovent una arquitectura de directoris lògica.

### Principi fonamental: mapeig de Namespace a ruta

La regla central de la PSR-4 és establir un **mapeig un a un** entre el **prefix del Namespace** i una **ruta de directori base**.

<div _ngcontent-ng-c3132336544="" aria-busy="false" aria-live="polite" class="markdown markdown-main-panel enable-updated-hr-color" dir="ltr" id="bkmrk-element-descripci%C3%B3-e" inline-copy-host=""><table data-path-to-node="6" style="width: 100%;"><thead><tr><td style="width: 23.7187%;">**Element**</td><td style="width: 39.6929%;">**Descripció**</td><td style="width: 36.5883%;">**Exemple en el teu Projecte**</td></tr></thead><tbody><tr><td data-path-to-node="6,1,0,0" style="width: 23.7187%;">**Prefijo del Namespace**</td><td data-path-to-node="6,1,1,0" style="width: 39.6929%;">La part inicial del namespace que identifica el teu codi.</td><td data-path-to-node="6,1,2,0" style="width: 36.5883%;">`App\`</td></tr><tr><td data-path-to-node="6,2,0,0" style="width: 23.7187%;">**Directori Base**</td><td data-path-to-node="6,2,1,0" style="width: 39.6929%;">La ruta física al servidor on resideix aquest prefix.</td><td data-path-to-node="6,2,2,0" style="width: 36.5883%;">`mvc_class/App/`</td></tr><tr><td data-path-to-node="6,3,0,0" style="width: 23.7187%;">**Nom Relatiu de Classe**</td><td data-path-to-node="6,3,1,0" style="width: 39.6929%;">La resta del namespace i el nom de la classe.</td><td data-path-to-node="6,3,2,0" style="width: 36.5883%;">`Controllers\Ctl_users`</td></tr><tr><td data-path-to-node="6,4,0,0" style="width: 23.7187%;">**Ruta del Fitxer**</td><td data-path-to-node="6,4,1,0" style="width: 39.6929%;">La concatenació de la ruta base, el nom relatiu i l'extensió `.php`.</td><td data-path-to-node="6,4,2,0" style="width: 36.5883%;">`mvc_class/App/Controllers/Ctl_users.php`</td></tr></tbody></table>

</div>### Com funciona?

Quan el teu codi sol·licita una classe:

<div _ngcontent-ng-c3132336544="" aria-busy="false" aria-live="polite" class="markdown markdown-main-panel enable-updated-hr-color" dir="ltr" id="bkmrk-sol%C2%B7licitud%3A-el-codi" inline-copy-host="">1. **Sol·licitud:** El codi intenta instanciar `new App\Controllers\Ctl_users()`.
2. **Transformació:** L'Autoloader (implementant PSR-4) elimina el **prefix** (`App\`) i converteix la resta (`Controllers\Ctl_users`) en la ruta relativa del fitxer, reemplaçant les barres invertides (`\`) per separadors de directori i afegint `.php`.
3. **Càrrega:** L'*autoloader* busca i carrega el fitxer resultant (`App/Controllers/Ctl_users.php`), fent la classe disponible per al codi.

</div>La PSR-4 obliga a què els **namespaces** i l'**estructura de fitxers** coincideixin, garantint que el teu codi sigui universalment compatible amb eines i gestors de dependències com **Composer**.

<div _ngcontent-ng-c3132336544="" aria-busy="false" aria-live="polite" class="markdown markdown-main-panel enable-updated-hr-color" dir="ltr" id="bkmrk-" inline-copy-host=""></div>