Azi am avut o discuție cu cineva despre namespaces și interfețe. În PHP, dar se aplică în orice limbaj. Ce face fiecare, la ce folosește fiecare?
Namespaces§
Cea mai bună analogie o reprezintă structura de directoare. Ai un fișier în src/foo/bar/baz.php
? Atunci vei folosi namespace foo/bar
. De ce nu și src
? Ei bine… pentru că se presupune că în src
este root-ul, dar îl poți include și ăla fără probleme.
După ce specifici namespace-uri, te vei referi la clase (sau funcții!) în relativ la acel namespace. Doar că relativitatea asta nu merge decât într-o singură direcție: în jos (adică mai specific).
E.g. din new foo\bar\baz()
va putea accesa foo\bar\foobar\foo()
doar specificând foobar\foo()
, dar nu va putea accesa și foo\bar()
specificând ceva de genul ..\bar()
, ci va fi nevoie de calea completă: \foo\bar()
.
Cum structurezi fișierele? Am ajuns la concluzia – eu și restul lumii – că cel mai bine este ca namespacing-ul să reflecte structura de directoare cât mai bine.
E un pic confuz dacă nu încerci, dar odată înțeleasă treaba, e foarte utilă.
Mâine voi scrie despre interfețe.
Printre painici si criptomonezi, s-a strecurat un articol de programare