namespace / use în PHP

Grupează clasele și funcțiile sub un nume comun, ca să nu se ciocnească cu altele care au același nume.

Sintaxă
namespace App\Modele;
use App\Modele\Produs;

Ce face namespace / use

Un proiect mare (sau unul care folosește biblioteci instalate cu Composer) poate avea două clase Produs. Spațiile de nume (namespace) le despart: App\Modele\Produs și Magazin\Produs sunt clase diferite.

Declarația namespace trebuie să fie prima instrucțiune din fișier (după declare, dacă există). Cu use la începutul fișierului „imporți” un nume lung, ca să scrii apoi doar Produs. Cu as îi poți da un nume scurt diferit.

Din interiorul unui namespace, clasele incluse în PHP se scriu cu bară inversă în față: \DateTime, \Exception. Altfel PHP le caută în namespace-ul curent.

Exemple

Exemplul 1: Clasa și numele ei complet

<?php
namespace App\Modele;

class Produs
{
}

echo Produs::class . "\n";
echo get_class(new Produs()) . "\n";
echo __NAMESPACE__;

Rezultat

App\Modele\Produs
App\Modele\Produs
App\Modele

Exemplul 2: Import cu use și alias cu as

În mod normal, fiecare namespace stă în fișierul lui. Aici, ca exemplul să ruleze într-un singur fișier, folosim forma cu acolade.

<?php
namespace App\Modele {
    class Produs
    {
        public function __construct(public string $nume)
        {
        }
    }
}

namespace Magazin {
    class Produs
    {
    }
}

namespace {
    use App\Modele\Produs;
    use Magazin\Produs as ProdusMagazin;

    $p = new Produs("Laptop");
    echo $p->nume . " este " . $p::class . "\n";
    echo ProdusMagazin::class;
}

Rezultat

Laptop este App\Modele\Produs
Magazin\Produs

Exemplul 3: Clase din PHP într-un namespace

<?php
namespace App;

try {
    throw new \RuntimeException("Eroare prinsă corect");
} catch (\RuntimeException $e) {
    echo $e->getMessage() . "\n";
}

echo (new \DateTimeImmutable("2026-10-19"))->format("d.m.Y");

Rezultat

Eroare prinsă corect
19.10.2026

Greșeli frecvente

  • Scrii cod sau HTML înainte de namespace. Primești eroarea Namespace declaration statement has to be the very first statement.
  • Într-un namespace scrii new DateTime() fără bară inversă. PHP caută App\DateTime și dă Class not found. Scrie \DateTime sau adaugă use DateTime;.
  • Crezi că use încarcă fișierul clasei. Nu încarcă nimic: doar scurtează numele. Fișierul trebuie inclus cu require sau printr-un autoloader (spl_autoload_register, Composer).

Comenzi înrudite

  • spl_autoload_register: Înregistrează o funcție care încarcă automat fișierul unei clase prima dată când clasa este folosită.
  • class / new / $this: Definește o clasă: un șablon pentru obiecte care au date (proprietăți) și funcții proprii (metode).
  • require / include: Încarcă și rulează codul dintr-un alt fișier PHP.