PHP Namespaces do not only provide a way in which to group related classes, functions and constants, but also a way in which to group related classes, interfaces, functions and constants.
Въведение в пространствата от имена
Пространствата от имена в PHP са проектирани с цел решаване на проблеми, свързани с областта на действие в големи библиотеки на PHP. В PHP всички дефиниции на класове са глобални. Затова, когато авторът на библиотеката създава множество помощни класове или такива за директно използване в дадена библиотека, той трябва да е наясно, че може да съществуват и други библиотеки с подобна функционалност и по тази причина да избере уникални наименования за своите класове, за да могат тези библиотеки да се използват съвместно. Обикновено този проблем се решава с поставяне на представка - уникален низ, като например класовете, свързани с бази от данни, могат да имат представка My_Library_DB и т.н. С развитието на библиотеката се добавят още представки, което води до появата на твърде дълги имена на класове.
Пространствата от имена позволяват на разработчика да управлява именуването в съответния обхват, без да използва дълги имена всеки път, когато има обръщение към даден клас и решават проблема с поделеното глобално пространство, без кодът да става нечетим.
Пространствата от имена са достъпни от PHP 5.3.0. Този раздел е експериментален и подлежи на промени.
Just a note: namespace (even nested or sub-namespace) cannot be just a number, it must start with a letter.
For example, lets say you want to use namespace for versioning of your packages or versioning of your API:
namespace Mynamespace\1; // Illegal
Instead use this:
namespace Mynamespace\v1; // OK
Thought this might help other newbies like me...
Name collisions means:
you create a function named db_connect, and somebody elses code that you use in your file (i.e. an include) has the same function with the same name.
To get around that problem, you rename your function SteveWa_db_connect which makes your code longer and harder to read.
Now you can use namespaces to keep your function name separate from anyone else's function name, and you won't have to make extra_long_named functions to get around the name collision problem.
So a namespace is like a pointer to a file path where you can find the source of the function you are working with
