downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

Дефиниция на пространство от имена> <Пространства от имена
[edit] Last updated: Fri, 18 Sep 2009

view this page in

Въведение в пространствата от имена

Пространствата от имена в PHP са проектирани с цел решаване на проблеми, свързани с областта на действие в големи библиотеки на PHP. В PHP всички дефиниции на класове са глобални. Затова, когато авторът на библиотеката създава множество помощни класове или такива за директно използване в дадена библиотека, той трябва да е наясно, че може да съществуват и други библиотеки с подобна функционалност и по тази причина да избере уникални наименования за своите класове, за да могат тези библиотеки да се използват съвместно. Обикновено този проблем се решава с поставяне на представка - уникален низ, като например класовете, свързани с бази от данни, могат да имат представка My_Library_DB и т.н. С развитието на библиотеката се добавят още представки, което води до появата на твърде дълги имена на класове.

Пространствата от имена позволяват на разработчика да управлява именуването в съответния обхват, без да използва дълги имена всеки път, когато има обръщение към даден клас и решават проблема с поделеното глобално пространство, без кодът да става нечетим.

Пространствата от имена са достъпни от PHP 5.3.0. Този раздел е експериментален и подлежи на промени.



add a note add a note User Contributed Notes Въведение в пространствата от имена
Anonymous 14-Jul-2011 04:14
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.
Dmitry Snytkine 31-May-2011 06:54
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
SteveWa 27-Feb-2011 08:45
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

 
show source | credits | stats | sitemap | contact | advertising | mirror sites