Treci la conținutul principal

Spații de nume în PHP

Un spațiu de nume oferă codului înrudit un nume comun. Împiedică clasele, interfețele, funcțiile și constantele să intre în conflict cu altele care au același nume.

Această protecție contează cu atât mai mult pe măsură ce codul tău crește sau când combini cod din mai multe surse.


De ce să folosim spații de nume?

  • Previn conflictele de nume, care devin mai probabile în proiectele mai mari
  • Îți împart codul în grupuri logice
  • Îți țin codul separat de codul bibliotecilor
  • Permit mai multor clase să aibă în siguranță același nume

Să zicem că un set de clase descrie un tabel HTML (Table, Row, Cell), iar alt set descrie mobilier (Table, Chair, Bed). Dacă pui fiecare set în propriul spațiu de nume, cele două clase Table nu vor fi confundate.


Declararea unui spațiu de nume

Un spațiu de nume se declară la începutul unui fișier PHP: scrie namespace, apoi numele pe care l-ai ales. Fragmentele de cod din această secțiune declară unul numit Html.

Notă: Poziția este strictă. Declarația trebuie să vină înaintea oricărui alt lucru din fișier, așa că un cod plasat înaintea ei este invalid.

Din acel punct, fiecare clasă, interfață, funcție și constantă declarată în fișier aparține spațiului de nume Html.

Poți, de asemenea, să imbrici spații de nume, pentru o organizare mai fină.

Exemplu

Aici, o clasă Table este creată în spațiul de nume Html:

Prompt
Creează un spațiu de nume PHP numit Html cu o clasă Table care are o proprietate $title, o proprietate $rows și o metodă info() care afișează titlul și numărul de rânduri. Creează o instanță a clasei Table și setează-i titlul la "My table" și rows la 5, apoi apelează metoda info().
Ieșire: script PHP

Declararea unui spațiu de nume

Pune cuvântul cheie namespace la începutul fișierului:

index.php
<?php
namespace Html;
?>

Declarație invalidă de spațiu de nume

Acest cod este invalid, deoarece alt cod vine înaintea declarației spațiului de nume:

index.php
<?php
echo "Hello World!";
namespace Html;
...
?>

Sintaxa spațiilor de nume imbricate

Aici, Html este imbricat într-un spațiu de nume numit Code:

index.php
<?php
namespace Code\Html;
?>

Folosirea spațiilor de nume

Tot codul de după declarația unui spațiu de nume rulează în acel spațiu de nume, așa că poate crea clasele lui folosind numele lor scurte, fără calificator. Codul din afara spațiului de nume trebuie să atașeze spațiul de nume la numele clasei.

Dacă lucrezi cu multe clase dintr-un singur spațiu de nume în același timp, cuvântul cheie namespace te scutește de scris:

Exemplu

Ca exemplul să poată rula, clasele sunt definite într-un bloc namespace Html { }, iar restul codului stă într-un bloc namespace { }, adică spațiul de nume global. De acolo, fiecare nume de clasă poartă prefixul Html\, iar get_class() afișează numele complet al clasei fiecărui obiect:

Prompt
Scrie cod PHP care definește clasele Table și Row în spațiul de nume Html, creează câte o instanță a fiecăreia din spațiul de nume global specificând spațiul de nume împreună cu numele clasei și afișează numele complet al clasei fiecărui obiect cu get_class().
Ieșire: script PHP

Exemplu

După declararea spațiului de nume Html, clasele definite în el nu mai au nevoie de calificatorul Html\. get_class() raportează în continuare numele lor complete:

Prompt
Scrie cod PHP în interiorul spațiului de nume Html care definește clasele Table și Row, creează instanțe ale lor fără să fie nevoie de calificatorul Html\ și afișează numele complet al clasei fiecărui obiect cu get_class().
Ieșire: script PHP

Alias pentru spațiu de nume

Un alias este un nume mai scurt pe care îl alegi pentru un spațiu de nume sau pentru o clasă și care face codul mai ușor de scris. Îl definești cu ajutorul cuvântului cheie use:

Exemplu

Aici, H devine un alias pentru spațiul de nume Html, așa că H\Table se referă la aceeași clasă ca Html\Table:

Prompt
Scrie cod PHP care definește clasa Table în spațiul de nume Html, dă spațiului de nume un alias H folosind cuvântul cheie use, creează o nouă instanță Table folosind aliasul și afișează numele complet al clasei obiectului cu get_class().
Ieșire: script PHP

Exemplu

Aici, T devine un alias pentru clasa Html\Table, așa că new T() creează un obiect Html\Table:

Prompt
Scrie cod PHP care definește clasa Table în spațiul de nume Html, dă clasei Html\Table un alias T folosind cuvântul cheie use, creează o nouă instanță folosind aliasul și afișează numele complet al clasei obiectului cu get_class().
Ieșire: script PHP