Spații de nume în PHP

Conceptul de namespace

Pentru a începe, luați în considerare următoarele două fișiere. fișier file1.php

Spații de nume în PHP

Cadrul YII2. Dezvoltarea rapidă a cadrelor moderne PHP

Explorați moderne subtilitățile cadru de dezvoltare web folosind YII2

În acest caz, rețineți că funcția foo () este declarată în fiecare dintre ele. dorit vreodată să sublinieze faptul că astăzi nu vorbim despre spațiile de nume, și în nici un fel nu se declară. Acest lucru înseamnă că spațiul de nume global este utilizat în mod implicit. Acum, uita-te la un alt fișier în care vom conecta două fișierul anterior și apelurile lansate de foo function (). index.php fișier

Prin rularea fișierul în browser-ul, noi, desigur, se va vedea o eroare, deoarece în acest moment, am declarat două funcții cu același nume:

Am vrut doar să sublinieze faptul că se referă la foo funcția (), în acest caz, vom folosi neeligibil numele - adică, este doar o funcție specifică de identificare (numele funcției, fără a ține cont de spațiu de nume). Ceea ce ar împiedica apariția unor erori - utilizați spațiul de nume. În acest scop, fiecare dintre fișierele incluse Specificați un spațiu de nume personalizat folosind cuvântul cheie spațiu de nume. fișier file1.php

Vă rugăm să rețineți că prin declararea unui spațiu de nume, trebuie să fie sigur de a înregistra cuvântul cheie spațiu de nume înainte de orice cod PHP sau date este afișat pe ecran, în caz contrar acesta va fi o greșeală. Acum, dacă vom actualiza datele din browser - vom primi o eroare de genul:

Cel mai probabil ați ghicit, eroarea înseamnă că nu poate fi găsit foo funcția (). Această funcție este definită, dar și în alte spații de nume. index.php fișier folosește un spațiu de nume la nivel mondial, astfel referindu-se la foo funcția (), folosind un non-calificare numele, ne-am cum nu putem accesa foo funcțiile (), a declarat în alte spații de nume. Pentru a avea acces la foo funcția (), fișier file1.php, trebuie să ne la începutul numelui funcției pentru a specifica spațiul de nume:

În acest caz, vom vedea în testarea browser-a numit funcției:

Astfel, am subliniat Translatorul PHP în cazul în care pentru a găsi funcția de interes pentru noi (în orice spațiu de nume, căutare). Și în acest caz, a îndeplinit funcția de foo () din fișierul file1.php. Dar, de fiecare dată când suni funcții sau variabile, se referă la spațiul de nume nu este foarte convenabil, astfel încât în ​​fișierul index.php, putem declara un spațiu de nume care suntem interesați și de apel, astfel, foo funcția (), folosind un nume care nu se califică:

În același timp, dacă ne mișcăm browser-ul, putem vedea că funcția îndeplinește în mod normal. Acum să vedem ce se întâmplă dacă sunt în spațiul de nume curent, va reveni la funcția de foo (), după cum urmează:

În acest caz, vom vedea o eroare similar cu următorul:

Spații de nume în PHP

Cadrul YII2. Dezvoltarea rapidă a cadrelor moderne PHP

Explorați moderne subtilitățile cadru de dezvoltare web folosind YII2

Eroarea se produce pentru că tu și eu apel la funcția, folosind numele și spațiul de nume - File1 \ foo (), asa ca vom folosi un nume calificat. Element de calificare cuprinde un nume de spațiu nume și element de identitate (nume). În acest caz, și în cazul numelor non-calificare, PHP interpret va adăuga întotdeauna declarații în spațiul de nume numele elementului numit. Astfel, dacă suntem la începutul spațiului de fișiere File1 a anunțat numele, și fac apel la executarea funcției File1 \ foo () - șirul va fi interpretat ca un File1 \ File1 \ foo (). Și acum să vedem ce se întâmplă dacă mă întorc la foo funcția (), după cum urmează:

În acest caz, vom vedea că funcția îndeplinește perfect.

Aici, aș dori să rețineți că \ File1 \ foo () - acesta este numele complet calificat al funcției foo (). Numele complet calificat începe întotdeauna cu o bară oblică și conține întregul identificator de spațiu de nume și elementul de interes (un nume de funcție, schimbarea, etc.). Dacă ne întoarcem la un nume complet de calificare, interpretul nu se va ține cont de spațiul anunțat anterior nume în interpretarea.

Declararea unui spațiu de nume, putem crea o anumită ierarhie de namespace, de exemplu. fișier file1.php

În fișierul index.php, putem apela foo () funcție, după cum urmează:

Importul și spațiile de nume pseudonime

În cazul în care proiectul nostru oferă o ierarhie de namespace, putem importa suntem interesați în spațiul de nume într-un anumit fișier, de exemplu, în spațiul de nume de import fișier index.php, folosind utilizarea de cuvinte cheie:

În același timp, nu putem declara că un spațiu de nume, și doar de import și pentru a apela o funcție sau variabilă, trebuie să se aplice cu namespaces lor. Dar acum suficient să se aplice doar un spațiu de nume copil și căutări interpret PHP pentru elementul de interes în spațiile de nume importate.

Importarea spațiul de nume, puteți specifica un alias, utilizând care puteți face referire la spațiul de nume, de exemplu:

În acest caz, ne putem referi la elementele de interes folosind un pseudonim. Dacă această interpretare ar putea alias va fi înlocuit de spațiul de nume importate, adică, provocând numele \ foo (), noi numim MyProject \ File1 \ foo (). Foarte util pentru a utiliza pentru a importa spațiul de nume în legătură cu alias-uri, de lucru cu clase, de exemplu, trebuie să citiți fișierul:

Observați importa alias-ul spațiului de nume și atribui direct la clasa descrisă în spațiul de nume specificat, astfel încât atunci când creați un obiect al acestei clase, eu pot folosi un pseudonim: nou Clasa_Mea (). Ce anume vom vedea când actualizarea paginii de browser:

Totuși, aș dori să vă atrag atenția asupra următorul exemplu, fișierul index.php:

În acest exemplu, noi suntem cu voi, luați în considerare crearea unui mecanism pentru a descărca automat clase folosind namespace. Notă, mai întâi vom importa spațiul de nume și atribui un alias pentru numele clasei. Următoarele descrie __autoload funcția ($ clasă), caracteristică automată clasa de încărcare, care va rula atunci când creați o clasă de obiect nedefinit anterior. Această funcție are o clasă parametru $ variabilă, care devine numele clasei, obiectul pe care încercăm să creeze. În acest caz, utilizați un clasa_mea alias, că atunci când se interpretează va fi înlocuit cu MyProject \ file3 \ My2, și respectă pe deplin cu structura de fișiere de exemplu, putem înlocui doar backslashe pe linie dreaptă și se adaugă o extensie la dosar.

Când actualizați browser-ul dvs., vom vedea în următorul ecran:

După cum puteți vedea toate lucrările cu succes.

Cum vedeți spațiile de nume poate fi foarte util, mai ales pentru proiecte mari și complexe, care sunt dezvoltate de către echipa de dezvoltare. Folosind spațiul de nume, puteți preveni erorile asociate cu numele duplicate ale diferitelor elemente ale scenariului dezvoltat, deoarece fiecare element este dezvoltat, care este în curs de dezvoltare individuală, acesta va fi definit în propriul spațiu de nume.

La această lecție este finalizată. Toate cele mai bune și o codificare de succes.

Spații de nume în PHP

Cadrul YII2. Dezvoltarea rapidă a cadrelor moderne PHP

Explorați moderne subtilitățile cadru de dezvoltare web folosind YII2

Cele mai multe știri IT si dezvoltare web pe canalul nostru-Telegram