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

search for in the

Использование пространств имён> <Пространства имён
Last updated: Fri, 28 Nov 2008

view this page in

Определение пространства имён

Пространство имён определяется посредством ключевого слова namespace, которое должно находиться в самом начале файла. Пример:

Пример #1 Определение пространства имён.

<?php
     namespace MyProject
::DB;

     const 
CONNECT_OK 1;

     class 
Connection /* ... */ }

     function 
connect() { /* ... */  }

     
?>
Это пространство имён может быть использовано в разных файлах.

Пространства имён могут включать определения классов, констант и функций. Но не должны включать обычного кода.

Определение пространства имён работает так:

  • Внутри пространства имён все имена классов, функций и констант автоматически будут префиксированы именем пространства имён. Имена классов при вызове должны быть полными, так например при вызове класса из примера выше должно использоваться следующее имя MyProject::DB::Connection.
  • Определения констант создают константы, состоящие из имени пространства имён и имени константы. Как и константы классов - константы пространства имён могут содержать данные только скалярного типа.
  • Поиск неквалифицированного имени класса (т.е. не содержащего ::) осуществляется в следующей последовательности:

    1. Попытка найти класс в текущем пространстве имён (т.е. префиксирование класса именем текущего пространства имён) без попытки автозагрузки (autoload).
    2. Попытка найти класс в глобальном пространстве имён без попытки автозагрузки (autoload).
    3. Попытка автозагрузки в текущем пространстве имён.
    4. В случае неудачи предыдущего - отказ.

  • Поиск неквалифицированного имени функции (т.е. не включающего ::) во время выполнения производится сначала в текущем пространстве имён, затем в глобальном пространстве имён.

  • Поиск неквалифицированного имени константы производится сначала в текущем пространстве имён, затем среди глобально объявленных констант.

Смотри так же правила разбора имён.



add a note add a note User Contributed Notes
Определение пространства имён
David Drakard
07-Sep-2008 03:56
I agree with SR, the new namespaces feature has solved a number of problems for me which would have required horrible coding to solve otherwise.

An example use:
Say you are making a small script, and write a class to connect to a database, calling it 'connection'. If you find your script useful and gradually expand it into a large application, you may want to rename the class. Without namespaces, you have to change the name and every reference to it (say in inheriting objects), possibly creating a load of bugs. With namespaces you can drop the related classes into a namespace with one line of code, and less chance of errors.

This is by no means one of the biggest problems namespaces solve; I would suggest reading about their advantages before citicising them. They provide an elegant solutions to several problems involved in creating complex systems.
Baptiste
14-May-2008 10:47
There is nothing wrong with PHP namespaces, except that those 2 instructions give a false impression of package management.
... while they just correspond to the "with()" instruction of Javascript.

By contrast, a package is a namespace for its members, but it offers more (like deployment facilities), and a compiler knows exactly what classes are in a package, and where to find them.
Anonymous
01-Apr-2008 10:11
@ RS: Also, you can specify how your __autoload() function looks for the files. That way another users namespace classes cannot overwrite yours unless they replace your file specifically.

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