# Spásanna ainmneacha agus uathluchtú (PSR-4)

> Spásanna ainmneacha PHP agus uathluchtú le PSR-4: ó ainm aicme go cosán comhaid, spl_autoload_register, uathluchtóir Composer agus seiceáil tar éis teagmhais.

Foinse: https://phpsos.de/ga/php/namespaces-autoloading/  
Staid: 25/10/2026  
Soláthraí: PHP SOS, Cabhair éigeandála PHP agus slándáil freastalaí. Cabhair láithreach trí WhatsApp: https://wa.me/491736494914?text=Dia%20duit%2C%20a%20PHP%20SOS%2C%20t%C3%A1%20cabhair%20de%20dh%C3%ADth%20orainn%20len%C3%A1r%20bhfreastala%C3%AD%20PHP.%20Cuideachta%3A%20%E2%80%A6%20Su%C3%ADomh%20gr%C3%A9as%C3%A1in%3A%20%E2%80%A6

**Go achomair:** Is cosúil le fillteáin d'ainmneacha aicmí iad spásanna ainmneacha i PHP: is féidir le `App\Rechnung\Pdf` agus `Bibliothek\Pdf` a bheith ann taobh le taobh gan cur isteach ar a chéile. Cinntíonn uathluchtú nach luchtaíonn PHP aicme go dtí go mbíonn sí ag teastáil den chéad uair. Socraíonn an caighdeán PSR-4 conas a dhéantar cosán comhaid d'ainm aicme; ginneann Composer an t-uathluchtóir cuí ina dhiaidh sin. Toisc go ritheann an t-uathluchtóir seo le gach iarratas, is ar cheann de na chéad rudaí a sheiceáiltear é tar éis teagmhais slándála.

## Cén fáth a dteastaíonn spásanna ainmneacha ó PHP

Tá spásanna ainmneacha ann ó PHP 5.3.0 i leith. Roimhe sin roinn gach aicme agus feidhm spás ainmneacha domhanda amháin. Má thug dhá leabharlann `Logger` orthu, tháinig briseadh. Chabhraigh forbróirí leo féin le hainmneacha fada ar nós `Firma_Modul_Unterbereich_Logger`.

Luann lámhleabhar PHP dhá fhadhb a réitíonn spásanna ainmneacha: coinbhleachtaí ainmneacha idir cód féin, aicmí inmheánacha PHP agus leabharlanna tríú páirtí, chomh maith le hainmneacha ródhéanacha nár cruthaíodh ach chun na coinbhleachtaí sin a sheachaint. Do lucht cinnteoireachta ciallaíonn sé seo: ní raibh sé praiticiúil go leor pacáistí coimhthíocha a chomhcheangal i dtionscadal amháin, mar is gnách inniu le [Composer](https://phpsos.de/ga/php/composer/), ach amháin le spásanna ainmneacha.

## Spásanna ainmneacha sa chleachtas: namespace, use, ailiasanna

Dearbhaíonn comhad a spás ainmneacha sa chéad ordú. Le `use` tugtar aicmí isteach ó spásanna ainmneacha eile, má theastaíonn faoi ainm níos giorra.

```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);
    }
}
```

Is é ainm iomlán na haicme seo `App\Rechnung\PdfErzeuger`. Tagraíonn an cúl-slais tosaigh ag `\sprintf` go sainráite don fheidhm dhomhanda PHP.

## Uathluchtú: aicmí a luchtú de réir mar is gá

Gan uathluchtú bheadh ar gach script na comhaid ar fad a theastaíonn a áireamh le `require`. Le `spl_autoload_register()` cláraítear feidhm ina ionad a ghlaonn PHP a luaithe a úsáidtear aicme anaithnid, comhéadan, tréith nó enum. Faigheann sí ainm na haicme agus luchtaíonn sí an comhad cuí.

```php
<?php
spl_autoload_register(function (string $klasse): void {
    $praefix = 'App\\';
    $basis   = __DIR__ . '/src/';

    if (!str_starts_with($klasse, $praefix)) {
        return; // níl sé freagrach, tá an chéad uathluchtóir eile i ndiaidh
    }
    $datei = $basis . str_replace('\\', '/', substr($klasse, strlen($praefix))) . '.php';
    if (is_file($datei)) {
        require $datei;
    }
});
```

Is féidir `spl_autoload_register()` a ghlaoch arís agus arís eile. Fiafraíonn PHP de na huathluchtóirí cláraithe ceann i ndiaidh a chéile ansin go dtí go luchtaíonn ceann acu an aicme. Sa chleachtas bíonn roinnt acu go minic ag feidhmchláir mhóra: uathluchtóir Composer do leabharlanna, ceann ar leith den CMS agus tuilleadh ó bhreiseáin nó ó mhodúil. Do riarthóirí ciallaíonn sé seo: an cód a luchtaítear i ndáiríre le hiarratas, éiríonn sé as idirghníomhú na n-uathluchtóirí seo go léir, ní as struchtúr na bhfillteán amháin.

Comhairlíonn an lámhleabhar go láidir gan eisceachtaí a chaitheamh in uathluchtóir; toirmisceann PSR-4 go sainráite é. Marcáladh an fheidhm níos sine `__autoload()` mar imithe i léig le PHP 7.2.0 agus baineadh amach í le PHP 8.0.0.

## PSR-4: ó ainm aicme go cosán comhaid

Is caighdeán den PHP-FIG é PSR-4. Tosaíonn ainm iomlán aicme le spás ainmneacha monaróra. Sanntar réimír den spás ainmneacha d'eolaire bunúsach, tugann an chuid eile den ainm fofhillteáin, agus críochnaíonn an comhad ar `.php`. Ní mór an cás litreach a mheaitseáil go díreach. Seo cuma an tsannta sa `composer.json`:

```json
{
    "autoload": {
        "psr-4": { "App\\": "src/" }
    }
}
```

| Ainm aicme | Comhad |
|---|---|
| `App\Kunde\Kunde` | `src/Kunde/Kunde.php` |
| `App\Rechnung\PdfErzeuger` | `src/Rechnung/PdfErzeuger.php` |
| `App\Rechnung\Pdf\Vorlage` | `src/Rechnung/Pdf/Vorlage.php` |

Is tuisliú clasaiceach é an cás litreach. Ar ríomhairí forbartha le Windows nó macOS, ní dhéanann an córas comhad idirdhealú go minic idir `Kunde.php` agus `kunde.php`, ach déanann ar fhreastalaí Linux. Ansin ní aimsíonn feidhmchlár a oibríonn go háitiúil aicme ar an bhfreastalaí. Cuireann riail PSR-4, na hainmneacha a úsáid go beacht sa litriú ceart, cosc ar iontais den sórt sin le linn an tseachadta.

Taobh le `psr-4`, aithníonn Composer `classmap` do chód gan struchtúr caighdeánach agus `files` do chomhaid a luchtaítear le gach iarratas, mar shampla feidhmeanna cúnta. Déanann an leathanach [Caighdeáin PSR](https://phpsos.de/ga/php/psr-standards/) cur síos ar chaighdeáin eile den PHP-FIG.

## An t-uathluchtóir a bharrfheabhsú sa táirgeadh

Sa táirgeadh is fearr nach lorgaíonn an t-uathluchtóir sa chóras comhad a thuilleadh, ach go bhféachann sé suas i liosta réidh. Tairgeann Composer dhá chéim chuige sin:

1. Athraíonn `composer install --no-dev --optimize-autoloader` na rialacha PSR-4 ina liosta aicmí. De réir cháipéisíocht Composer, moltar é sin don táirgeadh.
2. Téann `--classmap-authoritative` níos faide: luchtaítear aicmí ón liosta amháin. Ní luchtaíonn an t-uathluchtóir comhaid nach bhfuil liostaithe ar chor ar bith ansin.
3. Le gach seachadadh giniúntar an liosta as an nua, ionas go bhfaightear aicmí nua.

## Uathluchtú agus slándáil tar éis PHP2Shell

Baineann PHP2Shell leis an ateangaire PHP, ní leis an uathluchtóir. Fanann an nuashonrú go PHP 8.5.12, 8.4.27, 8.3.36 nó 8.2.35 agus atosú gach oibrí éigeantach. Tar éis teagmhais a d'fhéadfadh a bheith ann, áfach, is fiú aird ar leith a thabhairt ar an uathluchtóir: déantar `vendor/autoload.php` agus na comhaid go léir a bhfuil iontráil acu faoi `files` a rith le gach iarratas. Oibríonn líne a cuireadh isteach ansin ar an suíomh gréasáin ar fad, gan comhad nua amhrasach a bheith san fhillteán uaslódála.

Seiceáil dá bhrí sin an bhfuil `vendor` agus na comhaid uathluchtaithe ag teacht leis an staid sheiceáilte ón mbainistíocht leaganacha. Tá na hailt [Comhaid a athraíodh le déanaí a aimsiú](https://phpsos.de/ga/blog/geaenderte-dateien-finden/) agus [Croíchomhaid CMS a chur i gcomparáid leis an mbunleagan](https://phpsos.de/ga/blog/cms-kerndateien-vergleichen/) úsáideach. I gcás amhrais tá `vendor` nua-ghinte ón gcomhad glasála níos sábháilte ná aon deisiú aonair.

## Conas a chabhraíonn PHP SOS go praiticiúil?

- Cuirimid `vendor`, an t-uathluchtóir agus comhaid iontrála i gcomparáid leis an staid sheiceáilte agus marcálaimid gach neamhréireacht.
- Athchruthaímid an stoc pacáistí ón gcomhad glasála agus socraímid uathluchtóir barrfheabhsaithe.
- Seiceálaimid nach bhfuil ach an fillteán poiblí sa Webroot agus nach bhfuil an cód foinse inrochtana go díreach trí URL.
- I gcás ionfhabhtaithe glacaimid an glanadh orainn mar chuid de [bhaint bogearraí mailíseacha](https://phpsos.de/ga/leistungen/malware-entfernung/) agus déanaimid an toradh a dhoiciméadú.


## Ceisteanna coitianta

**Cathain a tháinig spásanna ainmneacha chun cinn i PHP?**  
Ó PHP 5.3.0 i leith. De réir an lámhleabhair, réitíonn siad dhá fhadhb: coinbhleachtaí ainmneacha idir cód féin, PHP agus leabharlanna tríú páirtí, chomh maith le hainmneacha aicmí ródhéanacha nár cruthaíodh ach chun a leithéid de choinbhleachtaí a sheachaint.

**Cad é an difríocht idir PSR-0 agus PSR-4?**  
Mapálann an dá cheann ainmneacha aicmí ar chosáin chomhaid. Le PSR-4 ní dhéantar réimír an spáis ainmneacha a athdhéanamh sa chosán comhaid, rud a thugann eolairí níos ísle. Tá PSR-0 aicmithe mar imithe i léig ag an PHP-FIG, is é PSR-4 an caighdeán molta.

**An n-oibríonn __autoload() fós?**  
Ní oibríonn. Marcáladh __autoload() mar imithe i léig le PHP 7.2.0 agus baineadh amach é le PHP 8.0.0. Inniu cláraítear uathluchtóirí le spl_autoload_register(), sa chleachtas den chuid is mó tríd an uathluchtóir a ghineann Composer.

**An gcaithfidh mé an t-uathluchtóir a ghiniúint arís tar éis aicme nua a chruthú?**  
I gcás rialacha PSR-4 amháin, ní gá, de réir cháipéisíocht Composer is buntáiste de PSR-4 é sin go sonrach. An té a úsáideann liosta aicmí barrfheabhsaithe sa táirgeadh, ní mór dó é a ghiniúint arís le gach seachadadh.

## Foinsí

- [PHP-FIG: Uathluchtóir PSR-4](https://www.php-fig.org/psr/psr-4/)
- [Lámhleabhar PHP: Spásanna ainmneacha, forbhreathnú](https://www.php.net/manual/de/language.namespaces.rationale.php)
- [Lámhleabhar PHP: Uathluchtú](https://www.php.net/manual/de/language.oop5.autoload.php)
- [Composer: Scéimre composer.json](https://getcomposer.org/doc/04-schema.md)
