# Namespaces u autoloading (PSR-4)

> Namespaces u autoloading f'PHP bi PSR-4: mill-isem tal-klassi sal-mogħdija tal-fajl, spl_autoload_register, l-autoloader ta' Composer u verifika wara inċidenti.

Sors: https://phpsos.de/mt/php/namespaces-autoloading/  
Stat: 25/10/2026  
Fornitur: PHP SOS, Għajnuna ta' emerġenza għal PHP u sigurtà tas-server. Għajnuna immedjata fuq WhatsApp: https://wa.me/491736494914?text=Bongu%20PHP%20SOS%2C%20g%C4%A7andna%20b%C5%BConn%20g%C4%A7ajnuna%20bis-server%20tal-PHP%20tag%C4%A7na.%20Kumpanija%3A%20%E2%80%A6%20Websajt%3A%20%E2%80%A6

**Fil-qosor:** In-namespaces f'PHP huma xi ħaġa bħal folders għall-ismijiet tal-klassijiet: `App\Rechnung\Pdf` u `Bibliothek\Pdf` jistgħu jeżistu flimkien mingħajr ma jiddisturbaw lil xulxin. L-autoloading jiżgura li PHP jgħabbi klassi biss meta tkun meħtieġa għall-ewwel darba. L-istandard PSR-4 jistabbilixxi kif minn isem ta' klassi ssir mogħdija ta' fajl; Composer imbagħad jiġġenera l-autoloader xieraq. Peress li dan l-autoloader jaħdem ma' kull talba, jagħmel parti mill-ewwel affarijiet li jiġu vverifikati wara inċident tas-sigurtà.

## Għaliex PHP jeħtieġ namespaces

In-namespaces jeżistu minn PHP 5.3.0. Qabel, il-klassijiet u l-funzjonijiet kollha kienu jaqsmu spazju wieħed globali tal-ismijiet. Jekk żewġ libreriji kienu jissejħu `Logger`, kien jiġri kollass. L-iżviluppaturi kienu jgħinu lilhom infushom b'ismijiet twal bħal `Firma_Modul_Unterbereich_Logger`.

Il-manwal ta' PHP isemmi żewġ problemi li jsolvu n-namespaces: kolliżjonijiet tal-ismijiet bejn kodiċi proprju, klassijiet interni ta' PHP u libreriji ta' terzi, kif ukoll ismijiet twal żżejjed li nħolqu biss biex jiġu evitati dawn il-kolliżjonijiet. Għal min jieħu d-deċiżjonijiet dan ifisser: biss in-namespaces għamluha prattikabbli li jinġabru għexieren ta' pakketti barranin fi proġett wieħed, kif illum huwa komuni b'[Composer](https://phpsos.de/mt/php/composer/).

## Namespaces fil-prattika: namespace, use, aliases

Fajl jiddikjara n-namespace tiegħu fl-ewwel istruzzjoni. B'`use` wieħed iġib klassijiet minn namespaces oħra, jekk irid taħt isem iqsar.

```php
<?php
declare(strict_types=1);

namespace App\Rechnung;

use App\Kunde\Kunde;
use Psr\Log\LoggerInterface as Log;

final class PdfErzeuger
{
    public function __construct(private Log $log) {}

    public function erzeugen(Kunde $kunde): string
    {
        $this->log->info('PDF erzeugt', ['kunde' => $kunde->id]);
        return \sprintf('Rechnung für %s', $kunde->name);
    }
}
```

L-isem sħiħ ta' din il-klassi huwa `App\Rechnung\PdfErzeuger`. Il-backslash fil-bidu ta' `\sprintf` jirreferi espliċitament għall-funzjoni globali ta' PHP.

## Autoloading: tagħbija tal-klassijiet meta jkun hemm bżonn

Mingħajr autoloading kull skript kellu jinkludi l-fajls kollha meħtieġa b'`require`. Minflok, b'`spl_autoload_register()` wieħed jirreġistra funzjoni li PHP isejjaħ hekk kif tintuża klassi, interface, trait jew enum mhux magħrufa. Din tirċievi l-isem tal-klassi u tgħabbi l-fajl xieraq.

```php
<?php
spl_autoload_register(function (string $klasse): void {
    $praefix = 'App\\';
    $basis   = __DIR__ . '/src/';

    if (!str_starts_with($klasse, $praefix)) {
        return; // mhux kompetenti, jmiss l-autoloader li jmiss
    }
    $datei = $basis . str_replace('\\', '/', substr($klasse, strlen($praefix))) . '.php';
    if (is_file($datei)) {
        require $datei;
    }
});
```

`spl_autoload_register()` jista' jissejjaħ diversi drabi. PHP mbagħad jistaqsi lill-autoloaders irreġistrati wieħed wara l-ieħor sakemm wieħed minnhom iġib il-klassi. Fil-prattika applikazzjonijiet kbar spiss ikollhom diversi minnhom: l-autoloader ta' Composer għal-libreriji, wieħed proprju taċ-CMS u oħrajn minn plugins jew moduli. Għall-amministraturi dan ifisser: liema kodiċi verament jittella' ma' talba jirriżulta mill-interazzjoni ta' dawn l-autoloaders kollha u mhux mill-istruttura tal-folders waħedha.

Il-manwal jiskoraġġixxi bil-qawwa t-tfigħ ta' exceptions f'autoloader; PSR-4 jipprojbih espliċitament. Il-funzjoni eqdem `__autoload()` ġiet immarkata bħala skaduta b'PHP 7.2.0 u tneħħiet b'PHP 8.0.0.

## PSR-4: mill-isem tal-klassi sal-mogħdija tal-fajl

PSR-4 huwa standard tal-PHP-FIG. Isem sħiħ ta' klassi jibda b'namespace tal-manifattur. Prefiss tan-namespace jiġi assenjat lil direttorju bażi, il-bqija tal-isem jagħti subfolders, u l-fajl jispiċċa b'`.php`. L-użu ta' ittri kbar u żgħar irid jaqbel eżatt. Hekk tidher l-assenjazzjoni fil-`composer.json`:

```json
{
    "autoload": {
        "psr-4": { "App\\": "src/" }
    }
}
```

| Isem tal-klassi | Fajl |
|---|---|
| `App\Kunde\Kunde` | `src/Kunde/Kunde.php` |
| `App\Rechnung\PdfErzeuger` | `src/Rechnung/PdfErzeuger.php` |
| `App\Rechnung\Pdf\Vorlage` | `src/Rechnung/Pdf/Vorlage.php` |

Ostaklu klassiku huwa l-użu ta' ittri kbar u żgħar. Fuq kompjuters tal-iżvilupp b'Windows jew macOS, is-sistema tal-fajls spiss ma tiddistingwix bejn `Kunde.php` u `kunde.php`, fuq server Linux iva. Applikazzjoni li taħdem lokalment mbagħad ma ssibx klassi fuq is-server. Ir-regola ta' PSR-4 li l-ismijiet jintużaw eżatt bl-ortografija korretta tevita sorpriżi bħal dawn waqt il-konsenja.

Minbarra `psr-4`, Composer jaf `classmap` għal kodiċi mingħajr struttura standard u `files` għal fajls li jitgħabbew ma' kull talba, pereżempju funzjonijiet ta' għajnuna. Standards oħra tal-PHP-FIG tiddeskrivihom il-paġna [Standards PSR](https://phpsos.de/mt/php/psr-standards/).

## Ottimizzazzjoni tal-autoloader fil-produzzjoni

Fil-produzzjoni l-aħjar li l-autoloader ma jfittixx aktar fis-sistema tal-fajls, imma jikkonsulta lista lesta. Composer joffri żewġ livelli għal dan:

1. `composer install --no-dev --optimize-autoloader` jittrasforma r-regoli PSR-4 f'lista tal-klassijiet. Dan huwa rakkomandat għall-produzzjoni skont id-dokumentazzjoni ta' Composer.
2. `--classmap-authoritative` imur aktar 'il quddiem: il-klassijiet jitgħabbew esklussivament mil-lista. Fajls li mhumiex elenkati l-autoloader mbagħad ma jgħabbihomx xejn.
3. Ma' kull konsenja l-lista tiġi ġġenerata mill-ġdid, biex klassijiet ġodda jinstabu.

## Autoloading u sigurtà wara PHP2Shell

PHP2Shell jaffettwa l-interpretatur ta' PHP, mhux l-autoloader. Jibqgħu obbligatorji l-aġġornament għal PHP 8.5.12, 8.4.27, 8.3.36 jew 8.2.35 u r-restart tal-workers kollha. Wara inċident possibbli, madankollu, l-autoloader jistħoqqlu attenzjoni speċjali: `vendor/autoload.php` u l-fajls kollha rreġistrati taħt `files` jiġu eżegwiti ma' kull talba. Linja injettata hemmhekk għalhekk taffettwa l-websajt kollha, mingħajr ma jkun hemm fajl ġdid li jidher fil-folder tal-uploads.

Iċċekkjaw għalhekk jekk `vendor` u l-fajls tal-autoload jaqblux mal-istat ivverifikat mill-kontroll tal-verżjonijiet. Utli huma l-artikoli [Sib il-fajls li nbidlu dan l-aħħar](https://phpsos.de/mt/blog/geaenderte-dateien-finden/) u [Qabbel il-fajls tal-qalba taċ-CMS mal-oriġinal](https://phpsos.de/mt/blog/cms-kerndateien-vergleichen/). Fil-każ ta' dubju, `vendor` maħluq mill-ġdid mill-fajl lock huwa aktar sigur minn kull tiswija individwali.

## Kif jgħin PHP SOS konkretament?

- Inqabblu `vendor`, l-autoloader u l-fajls ta' dħul mal-istat ivverifikat u nimmarkaw kull diverġenza.
- Nerġgħu nibnu l-istokk tal-pakketti mill-fajl lock u nwaqqfu autoloader ottimizzat.
- Niċċekkjaw jekk fil-webroot jinsab biss il-folder pubbliku u jekk il-kodiċi sors mhuwiex aċċessibbli direttament b'URL.
- F'każ ta' infezzjoni nieħdu f'idejna t-tindif bħala parti mit-[tneħħija tal-malware](https://phpsos.de/mt/leistungen/malware-entfernung/) u niddokumentaw ir-riżultat.


## Mistoqsijiet frekwenti

**Minn meta teżisti namespaces f'PHP?**  
Minn PHP 5.3.0. Skont il-manwal isolvu żewġ problemi: kolliżjonijiet tal-ismijiet bejn kodiċi proprju, PHP u libreriji ta' terzi, kif ukoll ismijiet twal żżejjed tal-klassijiet li nħolqu biss biex jiġu evitati tali kolliżjonijiet.

**X'inhi d-differenza bejn PSR-0 u PSR-4?**  
It-tnejn jimmappjaw ismijiet ta' klassijiet fuq mogħdijiet ta' fajls. Fil-każ ta' PSR-4 il-prefiss tan-namespace ma jiġix ripetut fil-mogħdija tal-fajl, u dan jagħti direttorji irqaq. PSR-0 huwa kklassifikat mill-PHP-FIG bħala skadut, PSR-4 huwa l-istandard rakkomandat.

**__autoload() għadu jaħdem?**  
Le. __autoload() ġie mmarkat bħala skadut b'PHP 7.2.0 u tneħħa b'PHP 8.0.0. Illum l-autoloaders jiġu rreġistrati b'spl_autoload_register(), fil-prattika l-aktar permezz tal-autoloader iġġenerat minn Composer.

**Għandi nerġa' niġġenera l-autoloader wara li noħloq klassi ġdida?**  
B'regoli PSR-4 purament, le; skont id-dokumentazzjoni ta' Composer dan huwa preċiżament vantaġġ ta' PSR-4. Min juża fil-produzzjoni lista ottimizzata tal-klassijiet, irid jerġa' jiġġenerha ma' kull konsenja.

## Sorsi

- [PHP-FIG: PSR-4 Autoloader](https://www.php-fig.org/psr/psr-4/)
- [Manwal ta' PHP: Namespaces, ħarsa ġenerali](https://www.php.net/manual/de/language.namespaces.rationale.php)
- [Manwal ta' PHP: Autoloading](https://www.php.net/manual/de/language.oop5.autoload.php)
- [Composer: L-iskema ta' composer.json](https://getcomposer.org/doc/04-schema.md)
